(資料科學學習手札130)利用geopandas快捷繪製線上地圖

費弗裡發表於2021-11-09

本文示例程式碼及檔案已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

1 簡介

  在上一篇文章中,我為大家介紹了不久前釋出的geopandas 0.10版本的諸多新特性,而其中介紹到的地圖視覺化新方法explore()只是一帶而過,沒有仔細為大家介紹其功能用法。今天的文章我就將為大家詳細介紹新版geopandas中,利用explore()製作線上地圖視覺化的方法:

(資料科學學習手札130)利用geopandas快捷繪製線上地圖

2 在geopandas中製作線上地圖視覺化

  explore()方法類似我們熟悉的plot()方法,是GeoSeriesGeoDataFrame物件皆有的方法,下面我們遞進式地介紹:

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到這些引數之後,我們就可以非常快捷地製作線上視覺化作品,以環渝地區為例:

(資料科學學習手札130)利用geopandas快捷繪製線上地圖
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
(資料科學學習手札130)利用geopandas快捷繪製線上地圖

  疊加多個圖層:

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')
    }
)
(資料科學學習手札130)利用geopandas快捷繪製線上地圖

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
(資料科學學習手札130)利用geopandas快捷繪製線上地圖
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
(資料科學學習手札130)利用geopandas快捷繪製線上地圖

2.3 儲存線上底圖

  如果我們想要持久化儲存繪製好的線上地圖作品,可以利用地圖物件的save()方法,將其儲存為離線html檔案:

m.save('demo.html')

  瀏覽器中檢視已儲存的html檔案:

(資料科學學習手札130)利用geopandas快捷繪製線上地圖

  以上就是本文的全部內容,歡迎在評論區與我進行討論~

相關文章