日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Folium库使用心得(一)

發布時間:2023/12/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Folium库使用心得(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考代碼:https://nbviewer.jupyter.org/github/python-visualization/folium/tree/master/examples/

初次接觸阿里云的天池實驗室,對【入門級-用Pandas揭秘美國選民的總統喜好】中的熱力圖可視化各州捐款數,進行 菜鳥 實踐,特別用到了python中的Folium庫,打開了新世界的大門。由于之前實踐過高德API,也發現Folium庫算是地圖的底層。(有關地圖的庫,實際應該還有其他,還未逐一實踐)
以下主要總結個人針對Folium庫的實踐經歷,特別是熱力圖、時間軸和時序數據的繪制,其中也會摻雜其他一些pandas,datetime小tip。
具體請結合【參考代碼】

1.地圖初始化:

m = folium.Map([43, -100], tiles="stamentonerbackground", zoom_start=4)

對應:中心點位置,地圖樣式,地圖放大級別
【地圖樣式選擇:stamentonerbackground,cartodbpositron,OpenStreetMap…(第24條)】

2.地圖自定義–Colormaps.ipynb

def my_color_function(feature):"""Maps low values to green and high values to red."""if unemployment_dict[feature["id"]] > 6.5:return "#ff0000"else:return "#008000" m = folium.Map([43, -100], tiles="cartodbpositron", zoom_start=4)folium.GeoJson(geo_json_data,style_function=lambda feature: {"fillColor": my_color_function(feature),"color": "black","weight": 2,"dashArray": "5, 5", #邊界線設置}, ).add_to(m)

自定義地圖層顏色,引入geo_json_date數據集,是對美國各州邊界的劃分。設置顏色函數,對區域進行填充。
針對geo_json_date數據集的格式如下;

import jsonimport folium import pandas as pd import requests url = ("https://raw.githubusercontent.com/python-visualization/folium/master/examples/data" ) us_states = f"{url}/us-states.json" geo_json_data = json.loads(requests.get(us_states).text) #邊界

folium對于美國各州繪制的數據格式為:
{‘type’: ‘FeatureCollection’,
‘features’: [{‘type’: ‘Feature’,
‘id’: ‘AL’, –州簡稱
‘properties’: {‘name’: ‘Alabama’},–州全稱
‘geometry’: {‘type’: ‘Polygon’,–州的形狀
‘coordinates’: [[[-87.359296, 35.00118], –邊界點
[-85.606675, 34.984749],
[-85.431413, 34.124869],
[-85.184951, 32.859696]…]]}},
{‘type’: ‘Feature’,
‘id’: ‘AK’,
‘properties’: {‘name’: ‘Alaska’},
‘geometry’: {‘type’: ‘MultiPolygon’,
‘coordinates’: [[[[-131.602021, 55.117982],…

3.漸變色選擇–Colormaps.ipynb
OrRd_09 等等

4.放置標記–ContinuousWorld.ipynb

folium.Marker(location=[0, 0], popup="I will disapear when moved outside the wrapped map domain." ).add_to(m)

對應 放置位置,點擊后marker的話語,

5.放置圖片–CustomIcon.ipynb

※6. 放置標簽–CustomPanes.ipynb

(1)未放置標簽:

m = folium.Map([43, -100], zoom_start=4, tiles="stamentoner")folium.GeoJson(geo_json_data).add_to(m)m


(2) 放置標簽

m = folium.Map([43, -100], zoom_start=4, tiles="stamentonerbackground")folium.GeoJson(geo_json_data).add_to(m)folium.map.CustomPane("labels").add_to(m) #放置1# Final layer associated to custom pane via the appropriate kwarg folium.TileLayer("stamentonerlabels", pane="labels").add_to(m) #放置2m


逐步放大可顯示各個州的名稱。

7.圖標分層–FeatureGroup.ipynb
LayerControl()–使得圖標可展示可不展示

8.加各種形狀圖標以及畫子圖—Features.ipynb
(1)畫圖標:ColorLine–畫圓

(2)Marker:標記屬性,標記大小,位置,標記點擊顯示提示內容…

(3)子圖:

mport brancaN = 100multi_iter2 = {"x": np.random.uniform(size=(N,)),"y": np.random.uniform(size=(N,)), }scatter = vincent.Scatter(multi_iter2, iter_idx="x", height=250, width=420) data = json.loads(scatter.to_json())f = branca.element.Figure()# Create two maps. m = folium.Map(location=[0, 0],tiles="stamenwatercolor",zoom_start=1,position="absolute",left="0%",width="50%",height="50%", )m2 = folium.Map(location=[46, 3],tiles="OpenStreetMap",zoom_start=4,position="absolute",left="50%",width="50%",height="50%",top="50%", )# Create two Vega. v = features.Vega(data, position="absolute", left="50%", width="50%", height="50%")v2 = features.Vega(data, position="absolute", left="0%", width="50%", height="50%", top="50%" )f.add_child(m) f.add_child(m2) f.add_child(v) f.add_child(v2)f

兩個地圖+兩個散點圖

(4)GeoJson:一次性添加多個marker

9.FloatImage.ipynb–地圖上添加圖片

10.GeoJSONWithoutTitles.ipynb–背景自定義(可以加柵格,但是柵格大小會變)

※11. 地理數據處理及熱力圖(區域)-- GeoJSON_and_choropleth.ipynb
(1)數據準備:上面的GeoJson或者geopandas庫
geopandas庫包含地理數據:

import geopandasgdf = geopandas.read_file(us_states)m = folium.Map([43, -100], zoom_start=4)folium.GeoJson(gdf, ).add_to(m)m

(2)點擊地圖某一位置,自動放大-- zoom_on_click

m = folium.Map([43, -100], zoom_start=4)folium.GeoJson(geo_json_data, zoom_on_click=True).add_to(m)m

(3)自定義顯示顏色

#提供函數的好處在于,您可以根據特性指定樣式。例如,如果你想用綠色顯示所有名字中包含字母“E”的州,只需: m = folium.Map([43, -100], zoom_start=4)folium.GeoJson(geo_json_data,style_function=lambda feature: {"fillColor": "green"if "e" in feature["properties"]["name"].lower()else "#ffff00","color": "black","weight": 2,"dashArray": "5, 5",}, ).add_to(m)m

※(4)熱力圖(區域)–Choropleth

m = folium.Map([43, -100], zoom_start=4)folium.Choropleth(geo_data=us_states,fill_opacity=0.3,line_weight=2, ).add_to(m)m

這個類可以將GeoJSON的圖形覆蓋到地圖上。如果不綁定數據則顯示單色的地圖,如果綁定數據則通過值得大小顯示不同顏色。具體使用方法:

class folium.features.Choropleth(geo_data, data=None, columns=None, key_on=None, bins=6, fill_color=None, nan_fill_color='black', fill_opacity=0.6, nan_fill_opacity=None, line_color='black', line_weight=1, line_opacity=1, name=None, legend_name='', overlay=True, control=True, show=True, topojson=None, smooth_factor=None, highlight=None, **kwargs)

參數說明:

geo_data:指定GeoJSON,可以是JsonURL、file path或其他類型 (json、dict、geopandas等)的GeoJSON幾何數據 data:需要綁定的GeoJSON的數據,默認為空。傳入的數據可以是Pandas DataFrame或Series,具體Series沒有使用過,拆測如果傳Series需要將index設置為匹配項。 columns:當數據傳入的時Pandas DataFrame設定想要的值,第一列需要與GeoJSON匹配的列,第二列為具體的值 key_on:GeoJSON中需要綁定的列,默認為空。格式中需要以feature對象開頭,如id或 feature.properties.statename bins:設定對值要劃分的數量,默認為6,如果傳入的是數值,則傳入數字時,會使用data中的最大值和最小值進行平均劃分。如果傳入的是一個序列,則會按序列定義邊界。同時也可以傳入字符串,可傳入的字符串可以從histogram的文檔中找到。 fill_color:區域需要填充的顏色,默認為blue,可以傳入16進制的顏色代碼或顏色名稱,如果綁定了數據,則可以傳入“顏色地圖”,比如:‘BuGn’, ‘BuPu’, ‘GnBu’, ‘OrRd’, ‘PuBu’, ‘PuBuGn’, ‘PuRd’, ‘RdPu’, ‘YlGn’, ‘YlGnBu’, ‘YlOrBr’, and ‘YlOrRd’. nan_fill_color:NaN區域填充的顏色,默認為’black’,即GeoJSON中沒有匹配到的圖形填充的顏色。 fill_opacity :填充顏色的透明度,默認為6,可選值為0-1 nan_fill_opacity:NaN區域填充顏色透明度,默認取fill_opacity的值。 line_color:區域邊框顏色,默認為’black’ line_weight:區域邊框款對,默認為1 line_opacity:區域邊框透明度,默認為1 legend_name:圖例標識名稱 topojson:除了GeoJson外,同時也支持TopoJSON格式的的邊界數據。 (string, default None) – If using a TopoJSON, passing “objects.yourfeature” to the topojson keyword argument will enable conversion to GeoJSON. TopoJSONs can be passed as “geo_data”, but the “topojson” keyword must also be passed with the reference to the topojson objects to convert. See the topojson.feature method in the TopoJSON API reference: https://github.com/topojson/topojson/wiki/API-Reference smooth_factor:平滑因子,主要為了簡化每個縮放級別的折線。數值越大表示越平滑,同時性能也更好,數值越小說明越精確,Leaflet中的默認值為0 highlight:當鼠標懸停在區域上時是否要突出顯示,默認為False name:層的名字,可選。如果設置了可以在LayerControls中出現。 overlay:添加層的設置,默認為True(覆蓋層),如果傳False則為基礎層。 control:是否將圖層包含到LayerControls中,默認為True show:是否在地圖打開時就顯示層,默認為True

e.g.:

import folium import pandas as pd geo_json_data = "data/china_city.json" df = pd.read_excel("data/orders.xlsx") m = folium.Map(location=[32, 120], zoom_start=5) folium.Choropleth(geo_data=geo_json_data,data=df,columns=["cityname", "order_count"],key_on="feature.properties.name",fill_color="BuPu",fill_opacity=0.7,line_opacity=0.2,legend_name="Order Count", ).add_to(m)

12.在每個邊界對象上顯示注釋–GeoJsonPopupAndTooltip.ipynb
【這里主要涉及對DataFrame對象的處理】
(覺得畫出來的還挺好看的,但是未實踐,待補)

13.熱力圖(點狀)–HeatMapWithTime.ipynb,Heatmap.ipynb
可以隨時間變化顯示點的熱力情況
后續會有基于區域熱力圖進行詳細試驗,主要涉及時序數據的處理。

14.地圖畫線-- Highlight_Function.ipynb

15.ImageOverlay.ipynb

16.畫多組Marker–MarkerCluster.ipynb

17.添加多個圓–MinMaxLimits.ipynb

18.地圖中加小地圖–MiniMap.ipynb

19.在設定位置上加圖表式的圖標–Minicharts.ipynb
可以直觀反映這個地方某方面的占比

20.點聚合–Plugins.ipynb
放置多個Marker,放大zoom時,可以將點聚合,顯示這一區域有對應幾個Marker

21.加各種形狀的線以及流動的線-- PolyLineTextPath_AntPath.ipynb

import folium from folium import pluginsm = folium.Map([30, 0], zoom_start=3) ##流動線的數據形式,注意經緯度放置順序 wind_locations = [[59.35560, -31.992190],[55.178870, -42.89062],[47.754100, -43.94531],[38.272690, -37.96875],[27.059130, -41.13281],[16.299050, -36.56250],[8.4071700, -30.23437],[1.0546300, -22.50000],[-8.754790, -18.28125],[-21.61658, -20.03906],[-31.35364, -24.25781],[-39.90974, -30.93750],[-43.83453, -41.13281],[-47.75410, -49.92187],[-50.95843, -54.14062],[-55.97380, -56.60156], ]wind_line = folium.PolyLine(wind_locations, weight=15, color="#8EE9FF").add_to(m) m = folium.Map()folium.plugins.AntPath(locations=wind_locations, reverse="True", dash_array=[20, 30] ).add_to(m)m.fit_bounds(m.get_bounds())m

22.畫封閉圖形(點連線成面)–Polygons_from_list_of_points.ipynb

23.SmoothFactor.ipynb–邊界線平滑
默認情況下,單張中的折線對象是平滑的。這將從行中刪除點,在繪圖時減少瀏覽器的負載。
平滑的級別可以在創建任何Polyline對象時通過smoothFactor作為一個選項來指定。在folium中,平滑的級別可以在初始化GeoJson、TopoJson和Choropleth對象時通過傳遞smooth_factor作為參數來確定。平滑水平沒有上界和下界;傳單的默認值是1。

folium.TopoJson(data=topo,object_path="objects.antarctic_ice_shelf",name="default_smoothing",smooth_factor=10, #1的時候不平滑,10的時候,在放大時是很平滑style_function=lambda x: {"color": "#004c00", "opacity": "0.7"}, ).add_to(m)

smooth_factor為平滑程度,隨著地圖的放大加載,邊界顯示越來越曲折。

24.地圖樣式類型–TilesExample.ipynb

※25.時間軸熱力圖(區域)–TimeSliderChoropleth.ipynb
后續以入門賽為背景詳講

26.在圖層上畫圓–VectorLayers.ipynb

27.自定義畫圖形–plugin-Draw.ipynb

28.地圖寬高設置-- WidthHeight.ipynb

29.搜索功能–plugin-Search.ipynb
輸入城市名字,會地圖展現至對應地方


感覺高德API中很多功能和Folium如出一轍,只是高德有更準確的地理數據,操作簡潔,頁面美觀。Folium庫的功能,高德上大部分都有對應的(時間軸的好像沒有,一般例如加標記,搜索,路線圖,熱力圖,聚合等等高德都是有的)。
但是高德只能做固定結果的呈現。對Folium,可以自己改代碼,跑代碼,更進一步體會Python的魅力~

后面寫Folium在【入門級-用Pandas揭秘美國選民的總統喜好】的應用~~
(加※號的在里面有更具體的實踐)

總結

以上是生活随笔為你收集整理的Folium库使用心得(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。