(數據科學學習手札130)利用geopandas快捷繪製在線地圖
本文示例程式碼及文件已上傳至我的
Github
倉庫//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'
,亦可傳入格式類似//{s}.yourtiles.com/{z}/{x}/{y}.png
的自定義地圖服務,注意,當自定義tiles時,必須設置attr參數attr:str型,用於設置底圖對應的attribution資訊
highlight:bool型,用於設置是否在滑鼠懸浮於矢量上時展示高亮效果,默認為
True
width:int或str型,int型時用於設置地影像素寬度,字元型時用於設置地圖相對於容器的百分比寬度,此參數在參數m設置時會失效
height:int或str型,int型時用於設置地影像素高度,字元型時用於設置地圖相對於容器的百分比高度,此參數在參數m設置時會失效
control_scale:bool型,用於設置是否展示比例尺,默認為
True
zoom_control:bool型,用於設置是否展示縮放組件,默認為
True
marker_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'
時,用於自定義點圖標,詳細用法參考://python-visualization.github.io/folium/modules.html#folium.map.Icon
- draggable:bool型,用於設置點圖標是否可自由拖拽,默認為
False
style_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='//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='//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型,用於設置是否開啟類別映射模式,默認為
False
legend:bool型,設置是否顯示圖例,默認為
True
scheme:字元型,同
plot()
中的同名參數,用於設定分層設色規則,參考我的過往文章://www.cnblogs.com/feffery/p/12381322.html
k:int型,用於設置分層設色分段數量,默認為5
vmin:float型,用於手動設置色彩映射最小值
vmax:float型,用於手動設置色彩映射最大值
categories:list型,用於傳入順序類別列表
tooltip_kwds:dict型,用於自定義設置tooltip樣式,詳細參考:
//python-visualization.github.io/folium/modules.html#folium.features.GeoJsonTooltip
popup_kwds:dict型,用於自定義設置popup樣式,詳細參考:
//python-visualization.github.io/folium/modules.html#folium.features.GeoJsonPopup
legend_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='//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='//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文件:
以上就是本文的全部內容,歡迎在評論區與我進行討論~