(資料科學學習手札133)利用geopandas繪製拓撲著色地圖

費弗裡發表於2021-12-27

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

1 簡介

  我們在繪製某些地圖時,為了凸顯出每個獨立的區域,需要滿足拓撲著色要求,即所有相鄰的區域不可以用同一種顏色繪製,以前的手繪地圖需要繪製者自行思考設計具體的著色規則,而現如今通過計算機的輔助,我們可以快速生成大量的著色方案。

  今天我們就來學習配合geopandas如何快速實現地圖的拓撲著色。

(資料科學學習手札133)利用geopandas繪製拓撲著色地圖

2 基於mapclassify的地圖拓撲著色

  對於著色方案的生成,我們需要使用到mapclassify這個第三方庫,以前我的geopandas系列文章分層設色篇也介紹過其中的諸多功能,而本文需要使用到其特殊的greedy功能。

  以中國縣級單元向量邊界資料為例,它包含了共2900個縣級單元的行政區劃面向量要素:

(資料科學學習手札133)利用geopandas繪製拓撲著色地圖

  對於這樣一個典型的面要素眾多的地圖,利用mapclassify.greedy(),我們可以基於面要素之間的鄰接拓撲關係,快速生成一定配色數量的方案出來,greedy()的主要引數如下:

  • gdf:GeoDataFrame型,用於傳入待處理的地理資料框
  • strategy:str型,用於設定拓撲著色所採取的具體策略,預設為balanced(這也是QGIS中拓撲著色所使用的方法),其餘可選策略有'largest_first''random_sequential''smallest_last''independent_set''connected_sequential_bfs''connected_sequential_dfs''connected_sequential''saturation_largest_first''DSATUR'等,詳細介紹見https://networkx.github.io/documentation/stable/reference/algorithms/generated/networkx.algorithms.coloring.greedy_color.html
  • balance:str型,當strategy='balanced'時,用於設定如何進行“平衡”著色,預設為'count',可選項如下,其中除了'count'方式以外,其餘方式均需要輸入的GeoDataFrame為投影座標系:
    • count:儘量保持每種顏色對應的面要素數量平衡
    • area:儘量保持每種顏色對應的面要素面積之和平衡
    • centroid:儘量保持每種顏色對應的面要素之間重心距離平衡
    • distance:儘量保持每種顏色對應的面要素之間拓撲距離平衡
  • min_colors:int型,當strategy='balanced'時,用於設定色彩方案至少的色彩數量,最後運算產生的色彩劃分結果可能會大於這個引數
  • sw:str型,用於設定拓撲鄰接關係判定策略,'rook'表示共邊鄰接'queen'表示共點鄰接,預設為'queen'
  • min_distance:數值型,預設為None,有時由於資料質量、精度的原因,可能會導致肉眼看起來的鄰接實際上仍然存在一定的“間距”,這時就可以使用min_distance引數來設定距離閾值來幫助greedy捕捉相鄰面要素關係,即面要素兩兩之間拓撲距離小於min_distance時也視作“鄰接”

  知曉了greedy()的主要引數後,我們下面來演示如何使用它來輔助製作拓撲著色地圖。

  首先我們需要向greedy()中傳入對應的面要素GeoDataFramegreedy()會根據我們的引數設定為每一個面生成一個標籤,我們只需要將此標籤列作為繪圖著色對映列即可,可以看到最終得到的標籤方案中共有7種不同標籤,雖然按照四色問題的猜想,任何拓撲著色地圖只需要4種顏色即可完成色彩填充,但在有限的計算時間內,greedy()給出了還不錯的方案:

(資料科學學習手札133)利用geopandas繪製拓撲著色地圖

  按照標籤進行顏色分配:

(資料科學學習手札133)利用geopandas繪製拓撲著色地圖

  放大仔細發現,每個鄰接的區域的確實現了顏色不重合:

(資料科學學習手札133)利用geopandas繪製拓撲著色地圖

  而如果你希望用自定義色彩值來配合標籤欄位進行對映,則可以參考我下面的做法,將具體的顏色值譬如16進位制色彩字串傳入color引數,這裡使用到以前介紹過多次的配色庫palettable

(資料科學學習手札133)利用geopandas繪製拓撲著色地圖

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

相關文章