本文示例代碼及文件已上傳至我的
Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes
1 簡介
在上一篇文章中,我為大家介紹了不久前發布的geopandas 0.10版本的諸多新特性,而其中介紹到的地圖可視化新方法explore()只是一帶而過,沒有仔細為大家介紹其功能用法。今天的文章我就將為大家詳細介紹新版geopandas中,利用explore()制作在線地圖可視化的方法:
2 在geopandas中制作在線地圖可視化
explore()方法類似我們熟悉的plot()方法,是GeoSeries與GeoDataFrame對象皆有的方法,下面我們遞進式地介紹:
2.1 GeoSeries.explore()方法的使用
GeoSeries.explore()的主要參數如下:
color:str或數組,用於設置所繪制矢量的顏色,當傳入數組時可一一對應按順序設置每個矢量的顏色
m:類似
plot()方法中的ax參數,用於傳入已存在的地圖對象,從而實現多圖層疊加tiles:str型,用於設置底圖來源,默認為
'OpenStreetMap',其他可用的有'Stamen Terrain'、'Stamen Toner'、'Stamen Watercolor'、'CartoDB positron'及'CartoDB dark_matter',亦可傳入格式類似http://{s}.yourtiles.com/{z}/{x}/{y}.png的自定義地圖服務,注意,當自定義tiles時,必須設置attr參數attr:str型,用於設置底圖對應的attribution信息
highlight:bool型,用於設置是否在鼠標懸浮於矢量上時展示高亮效果,默認為
Truewidth:int或str型,int型時用於設置地圖像素寬度,字符型時用於設置地圖相對於容器的百分比寬度,此參數在參數m設置時會失效
height:int或str型,int型時用於設置地圖像素高度,字符型時用於設置地圖相對於容器的百分比高度,此參數在參數m設置時會失效
control_scale:bool型,用於設置是否展示比例尺,默認為
Truezoom_control:bool型,用於設置是否展示縮放組件,默認為
Truemarker_type:str型,用於設置點要素的樣式類型,可選的有
'marker'、'circle'和'circle_marker'marker_kwds:dict型,用於設置點要素的更多細節參數,常用的有:
- radius:float型,用於設置點要素的半徑,當
marker_type='circle'時單位為米,當marker_type='circle_marker'時單位為像素- icon:folium.map.Icon型,當
marker_type='marker'時,用於自定義點圖標,詳細用法參考:https://python-visualization.github.io/folium/modules.html#folium.map.Icon- draggable:bool型,用於設置點圖標是否可自由拖拽,默認為
Falsestyle_kwds:dict型,用於設置矢量的樣式細節參數,常用的參數有:
- stroke:bool型,設置是否繪制矢量輪廓,默認為
True- color:str型,用於設置輪廓顏色
- weight:int型,用於設置輪廓像素寬度
- opacity:float型,取值0~1之間,用於設置輪廓透明度,默認為1.0
- fill:bool型,用於設置是否繪制矢量填充,默認為
True- fillColor:str型,用於設置矢量填充色
- fillOpacity:float型,用於設置填充色透明度,默認為0.5
highlight_kwds:dict型,參數結構同style_kwds,用於設置鼠標懸浮高亮狀態下的各樣式參數
min_zoom、max_zoom、zoom_start:int型,分別用於設置地圖的最小、最大及初始化縮放層級,默認值分別為0、18、10
location:元組或列表,用於設置地圖初始化時的中心坐標,格式為
[緯度, 經度]
get到這些參數之后,我們就可以非常快捷地制作在線可視化作品,以環渝地區為例:
m = shp.geometry.explore(
color='#40a9ff',
tiles='https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
attr=' ',
width='80%',
tooltip=False, # 關閉鼠標懸浮時的空白tooltip
style_kwds={
'color': 'white',
'fillOpacity': 0.4
},
highlight_kwds={
'fillColor': 'white',
'fillOpacity': 0.6
}
)
m
疊加多個圖層:
import folium
m = shp.geometry.explore(
color='#40a9ff',
tiles='https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
attr=' ',
width='80%',
tooltip=False, # 關閉鼠標懸浮時的空白tooltip
style_kwds={
'color': 'white',
'fillOpacity': 0.4
},
highlight_kwds={
'fillColor': 'white',
'fillOpacity': 0.6
}
)
shp.representative_point().explore(
color='red',
tooltip=False, # 關閉鼠標懸浮時的空白tooltip
m=m, # 疊加已有地圖
marker_type='marker',
marker_kwds={
'icon': folium.map.Icon(icon='beer', prefix='fa')
}
)
2.2 GeoDataFrame.explore()方法的使用
與GeoSeries.explore()相比,GeoDataFrame除了矢量字段之外,還可以快捷地利用數據框中其他字段的信息,來輔助視覺元素的映射,因此在GeoSeries.explore()的參數體系基礎上,GeoDataFrame.explore()新增了如下參數,與plot()方法非常相似:
column:str型或數組,用於指定繪圖映射基於的字段名,亦或是額外傳入的與矢量一一對應的數組
cmap:str型或matplotlib中的colormap對象,用於設置色彩映射方案
tooltip:bool、str或list型,用於自定義鼠標懸浮時提示框內顯示的字段信息,
True表示展示全部字段,False表示關閉提示框,str型時可指定單個要展示的字段名,list型時指定多個要展示的字段popup:用於設置鼠標點擊觸發展示的信息框內容,格式同tooltip
categorical:bool型,用於設置是否開啟類別映射模式,默認為
Falselegend:bool型,設置是否顯示圖例,默認為
Truescheme:字符型,同
plot()中的同名參數,用於設定分層設色規則,參考我的過往文章:https://www.cnblogs.com/feffery/p/12381322.htmlk:int型,用於設置分層設色分段數量,默認為5
vmin:float型,用於手動設置色彩映射最小值
vmax:float型,用於手動設置色彩映射最大值
categories:list型,用於傳入順序類別列表
tooltip_kwds:dict型,用於自定義設置tooltip樣式,詳細參考:
https://python-visualization.github.io/folium/modules.html#folium.features.GeoJsonTooltippopup_kwds:dict型,用於自定義設置popup樣式,詳細參考:
https://python-visualization.github.io/folium/modules.html#folium.features.GeoJsonPopuplegend_kwds:dict型,用於自定義設置圖例,主要的參數有:
- caption:str型,自定義圖例標題,默認為映射字段名
- colorbar:bool型,用於設置是否開啟colorbar模式,設置為
False時會開啟分段模式- fmt:str型,用於自定義圖例項數值格式,默認為
'{:.2f}'- labels:list型,自定義圖例項標簽文字,來覆蓋原始自動生成內容
- max_labels:int型,設置colorbar圖例中刻度數量
- scale:bool型,設置是否以真實尺度來渲染每段分層設色區間,
False時每段色階長度會強制相同
下面我們來基於這些實用的參數,繪制幾個示例:
m = shp.explore(
column='area',
cmap='Blues',
tiles='https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
attr=' ',
scheme='NaturalBreaks',
k=3,
vmin=0,
legend_kwds={
'caption': '面積(平方千米)',
'scale': False,
'colorbar': False
},
style_kwds={
'color': 'white',
'weight': 1,
'fillOpacity': 0.8
}
)
m
m = shp.explore(
column='area',
cmap='Reds',
tiles='https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}',
attr=' ',
scheme='NaturalBreaks',
k=3,
vmin=0,
legend_kwds={
'caption': '面積(平方千米)',
'scale': False
},
style_kwds={
'color': 'white',
'weight': 1,
'fillOpacity': 0.7
}
)
m
2.3 保存在線底圖
如果我們想要持久化保存繪制好的在線地圖作品,可以利用地圖對象的save()方法,將其保存為離線html文件:
m.save('demo.html')
瀏覽器中查看已保存的html文件:
以上就是本文的全部內容,歡迎在評論區與我進行討論~
