1. 地圖可視化:geopandas繪制拓?fù)渲貓D

        共 2031字,需瀏覽 5分鐘

         ·

        2021-12-29 15:25

        添加微信號"CNFeffery"加入技術(shù)交流群

        ?

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

        ?

        1 簡介

        我們在繪制某些地圖時(shí),為了凸顯出每個(gè)獨(dú)立的區(qū)域,需要滿足拓?fù)渲?/code>要求,即所有相鄰的區(qū)域不可以用同一種顏色繪制,以前的手繪地圖需要繪制者自行思考設(shè)計(jì)具體的著色規(guī)則,而現(xiàn)如今通過計(jì)算機(jī)的輔助,我們可以快速生成大量的著色方案。

        今天我們就來學(xué)習(xí)配合geopandas如何快速實(shí)現(xiàn)地圖的拓?fù)渲?/p>

        2 基于mapclassify的地圖拓?fù)渲?/span>

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

        以中國縣級單元矢量邊界數(shù)據(jù)為例,它包含了共2900個(gè)縣級單元的行政區(qū)劃面矢量要素:

        對于這樣一個(gè)典型的面要素眾多的地圖,利用mapclassify.greedy(),我們可以基于面要素之間的鄰接拓?fù)?/span>關(guān)系,快速生成一定配色數(shù)量的方案出來,greedy()的主要參數(shù)如下:

        • gdf:GeoDataFrame型,用于傳入待處理的地理數(shù)據(jù)框
        • strategy:str型,用于設(shè)定拓?fù)渲扇〉木唧w策略,默認(rèn)為balanced(這也是QGIS中拓?fù)渲褂玫姆椒ǎ?,其余可選策略有'largest_first''random_sequential'、'smallest_last''independent_set'、'connected_sequential_bfs''connected_sequential_dfs'、'connected_sequential'、'saturation_largest_first''DSATUR'等,詳細(xì)介紹見https://networkx.github.io/documentation/stable/reference/algorithms/generated/networkx.algorithms.coloring.greedy_color.html
        • balance:str型,當(dāng)strategy='balanced'時(shí),用于設(shè)定如何進(jìn)行“平衡”著色,默認(rèn)為'count',可選項(xiàng)如下,其中除了'count'方式以外,其余方式均需要輸入的GeoDataFrame為投影坐標(biāo)系:
          • count:盡量保持每種顏色對應(yīng)的面要素?cái)?shù)量平衡
          • area:盡量保持每種顏色對應(yīng)的面要素面積之和平衡
          • centroid:盡量保持每種顏色對應(yīng)的面要素之間「重心距離」平衡
          • distance:盡量保持每種顏色對應(yīng)的面要素之間「拓?fù)渚嚯x」平衡
        • min_colors:int型,當(dāng)strategy='balanced'時(shí),用于設(shè)置色彩方案「至少」的色彩數(shù)量,最后運(yùn)算產(chǎn)生的色彩劃分結(jié)果可能會大于這個(gè)參數(shù)
        • sw:str型,用于設(shè)定拓?fù)溧徑雨P(guān)系判定策略,'rook'表示「共邊鄰接」,'queen'表示「共點(diǎn)鄰接」,默認(rèn)為'queen'
        • min_distance:數(shù)值型,默認(rèn)為None,有時(shí)由于數(shù)據(jù)質(zhì)量、精度的原因,可能會導(dǎo)致肉眼看起來的鄰接實(shí)際上仍然存在一定的“間距”,這時(shí)就可以使用min_distance參數(shù)來設(shè)定距離閾值來幫助greedy捕捉相鄰面要素關(guān)系,即面要素兩兩之間拓?fù)渚嚯x小于min_distance時(shí)也視作“鄰接”

        知曉了greedy()的主要參數(shù)后,我們下面來演示如何使用它來輔助制作拓?fù)渲貓D。

        首先我們需要向greedy()中傳入對應(yīng)的面要素GeoDataFramegreedy()會根據(jù)我們的參數(shù)設(shè)定為每一個(gè)面生成一個(gè)標(biāo)簽,我們只需要將此標(biāo)簽列作為繪圖著色映射列即可,可以看到最終得到的標(biāo)簽方案中共有7種不同標(biāo)簽,雖然按照四色問題的猜想,任何拓?fù)渲貓D只需要4種顏色即可完成色彩填充,但在有限的計(jì)算時(shí)間內(nèi),greedy()給出了還不錯(cuò)的方案:

        按照標(biāo)簽進(jìn)行顏色分配:

        放大仔細(xì)發(fā)現(xiàn),每個(gè)鄰接的區(qū)域的確實(shí)現(xiàn)了顏色不重合:

        而如果你希望用自定義色彩值來配合標(biāo)簽字段進(jìn)行映射,則可以參考我下面的做法,將具體的顏色值譬如16進(jìn)制色彩字符串傳入color參數(shù),這里使用到以前介紹過多次的配色庫palettable


        以上就是本文的全部內(nèi)容,歡迎在評論區(qū)與我進(jìn)行討論~

        加入知識星球【我們談?wù)摂?shù)據(jù)科學(xué)】

        400+小伙伴一起學(xué)習(xí)!








        · 推薦閱讀?·

        「Python實(shí)用秘技01」復(fù)雜zip文件的解壓

        「Python實(shí)用秘技02」給Python函數(shù)定“鬧鐘”

        「Python實(shí)用秘技03」導(dǎo)出項(xiàng)目的極簡環(huán)境依賴


        瀏覽 124
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 爱搞亚洲 | 小黄片网站 | 国产一级片中文字幕 | 日日夜夜操骚逼 | 人妻洗澡被强公日日澡 |