天天看點

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

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

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

  <code>explore()</code>方法類似我們熟悉的<code>plot()</code>方法,是<code>GeoSeries</code>與<code>GeoDataFrame</code>對象皆有的方法,下面我們遞進式地介紹:

  <code>GeoSeries.explore()</code>的主要參數如下:

color:str或數組,用于設定所繪制矢量的顔色,當傳入數組時可一一對應按順序設定每個矢量的顔色 m:類似<code>plot()</code>方法中的<code>ax</code>參數,用于傳入已存在的地圖對象,進而實作多圖層疊加 tiles:str型,用于設定底圖來源,預設為<code>'OpenStreetMap'</code>,其他可用的有<code>'Stamen Terrain'</code>、<code>'Stamen Toner'</code>、<code>'Stamen Watercolor'</code>、<code>'CartoDB positron'</code>及<code>'CartoDB dark_matter'</code>,亦可傳入格式類似<code>http://{s}.yourtiles.com/{z}/{x}/{y}.png</code>的自定義地圖服務,注意,當自定義tiles時,必須設定attr參數 attr:str型,用于設定底圖對應的attribution資訊 highlight:bool型,用于設定是否在滑鼠懸浮于矢量上時展示高亮效果,預設為<code>True</code> width:int或str型,int型時用于設定地圖像素寬度,字元型時用于設定地圖相對于容器的百分比寬度,此參數在參數m設定時會失效 height:int或str型,int型時用于設定地圖像素高度,字元型時用于設定地圖相對于容器的百分比高度,此參數在參數m設定時會失效 control_scale:bool型,用于設定是否展示比例尺,預設為<code>True</code> zoom_control:bool型,用于設定是否展示縮放元件,預設為<code>True</code> marker_type:str型,用于設定點要素的樣式類型,可選的有<code>'marker'</code>、<code>'circle'</code>和<code>'circle_marker'</code> marker_kwds:dict型,用于設定點要素的更多細節參數,常用的有: radius:float型,用于設定點要素的半徑,當<code>marker_type='circle'</code>時機關為米,當<code>marker_type='circle_marker'</code>時機關為像素 icon:folium.map.Icon型,當<code>marker_type='marker'</code>時,用于自定義點圖示,詳細用法參考:<code>https://python-visualization.github.io/folium/modules.html#folium.map.Icon</code> draggable:bool型,用于設定點圖示是否可自由拖拽,預設為<code>False</code> style_kwds:dict型,用于設定矢量的樣式細節參數,常用的參數有: stroke:bool型,設定是否繪制矢量輪廓,預設為<code>True</code> color:str型,用于設定輪廓顔色 weight:int型,用于設定輪廓像素寬度 opacity:float型,取值0~1之間,用于設定輪廓透明度,預設為1.0 fill:bool型,用于設定是否繪制矢量填充,預設為<code>True</code> fillColor:str型,用于設定矢量填充色 fillOpacity:float型,用于設定填充色透明度,預設為0.5 highlight_kwds:dict型,參數結構同style_kwds,用于設定滑鼠懸浮高亮狀态下的各樣式參數 min_zoom、max_zoom、zoom_start:int型,分别用于設定地圖的最小、最大及初始化縮放層級,預設值分别為0、18、10 location:元組或清單,用于設定地圖初始化時的中心坐标,格式為<code>[緯度, 經度]</code>

  get到這些參數之後,我們就可以非常快捷地制作線上可視化作品,以環渝地區為例:

  疊加多個圖層:

  與<code>GeoSeries.explore()</code>相比,<code>GeoDataFrame</code>除了矢量字段之外,還可以快捷地利用資料框中其他字段的資訊,來輔助視覺元素的映射,是以在<code>GeoSeries.explore()</code>的參數體系基礎上,<code>GeoDataFrame.explore()</code>新增了如下參數,與<code>plot()</code>方法非常相似:

column:str型或數組,用于指定繪圖映射基于的字段名,亦或是額外傳入的與矢量一一對應的數組 cmap:str型或matplotlib中的colormap對象,用于設定色彩映射方案 tooltip:bool、str或list型,用于自定義滑鼠懸浮時提示框内顯示的字段資訊,<code>True</code>表示展示全部字段,<code>False</code>表示關閉提示框,str型時可指定單個要展示的字段名,list型時指定多個要展示的字段 popup:用于設定滑鼠點選觸發展示的資訊框内容,格式同tooltip categorical:bool型,用于設定是否開啟類别映射模式,預設為<code>False</code> legend:bool型,設定是否顯示圖例,預設為<code>True</code> scheme:字元型,同<code>plot()</code>中的同名參數,用于設定分層設色規則,參考我的過往文章:<code>https://www.cnblogs.com/feffery/p/12381322.html</code> k:int型,用于設定分層設色分段數量,預設為5 vmin:float型,用于手動設定色彩映射最小值 vmax:float型,用于手動設定色彩映射最大值 categories:list型,用于傳入順序類别清單 tooltip_kwds:dict型,用于自定義設定tooltip樣式,詳細參考:<code>https://python-visualization.github.io/folium/modules.html#folium.features.GeoJsonTooltip</code> popup_kwds:dict型,用于自定義設定popup樣式,詳細參考:<code>https://python-visualization.github.io/folium/modules.html#folium.features.GeoJsonPopup</code> legend_kwds:dict型,用于自定義設定圖例,主要的參數有: caption:str型,自定義圖例标題,預設為映射字段名 colorbar:bool型,用于設定是否開啟colorbar模式,設定為<code>False</code>時會開啟分段模式 fmt:str型,用于自定義圖例項數值格式,預設為<code>'{:.2f}'</code> labels:list型,自定義圖例項标簽文字,來覆寫原始自動生成内容 max_labels:int型,設定colorbar圖例中刻度數量 scale:bool型,設定是否以真實尺度來渲染每段分層設色區間,<code>False</code>時每段色階長度會強制相同

  下面我們來基于這些實用的參數,繪制幾個示例:

  如果我們想要持久化儲存繪制好的線上地圖作品,可以利用地圖對象的<code>save()</code>方法,将其儲存為離線html檔案:

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

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