本文示例程式碼及檔案已上傳至我的
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型,用於設定是否在滑鼠懸浮於向量上時展示高亮效果,預設為
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'
時,用於自定義點圖示,詳細用法參考:https://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='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型,用於設定是否開啟類別對映模式,預設為
False
legend:bool型,設定是否顯示圖例,預設為
True
scheme:字元型,同
plot()
中的同名引數,用於設定分層設色規則,參考我的過往文章:https://www.cnblogs.com/feffery/p/12381322.html
k:int型,用於設定分層設色分段數量,預設為5
vmin:float型,用於手動設定色彩對映最小值
vmax:float型,用於手動設定色彩對映最大值
categories:list型,用於傳入順序類別列表
tooltip_kwds:dict型,用於自定義設定tooltip樣式,詳細參考:
https://python-visualization.github.io/folium/modules.html#folium.features.GeoJsonTooltip
popup_kwds:dict型,用於自定義設定popup樣式,詳細參考:
https://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='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檔案:
以上就是本文的全部內容,歡迎在評論區與我進行討論~