<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          原來(lái)炫酷的可視化地圖,用Python就能搞定!

          共 4310字,需瀏覽 9分鐘

           ·

          2020-11-22 08:05

          對(duì)于可視化地圖,?我們之前講過(guò)Pyecharts


          還有應(yīng)該就是一些網(wǎng)站了,現(xiàn)成的工具,不需要敲代碼。


          比如下面就是用Pyecharts做的5G手機(jī)可視化地圖~



          而對(duì)于Matplotlib,目前還沒(méi)有使用它繪制過(guò)地圖。


          所以在查閱相關(guān)資料的時(shí)候,又發(fā)現(xiàn)了大佬造的輪子。


          Python+Selenium+Matplotlib,實(shí)現(xiàn)中國(guó)地圖可視化。


          地圖數(shù)據(jù)來(lái)源于民政部,真實(shí)可靠。


          項(xiàng)目地址:https://gitee.com/jixuanfan/Map-of-China



          由于小F之前一直用「GitHub」保存代碼,壓根就沒(méi)有注冊(cè)「Gitee」。


          而作者的代碼以及相關(guān)數(shù)據(jù)是上傳到「Gitee」上,需要注冊(cè)下載。


          不想注冊(cè)那么多賬號(hào),所以查了一下在不登錄情況下,能否下載項(xiàng)目代碼。


          CURL,是一個(gè)利用URL語(yǔ)法在命令行下工作的文件傳輸工具。


          #?在倉(cāng)庫(kù)地址(https://gitee.com/jixuanfan/Map-of-China)
          #?后面拼接/repository/archive/master.zip

          #?下載本例項(xiàng)目代碼
          curl?-o?data.zip??https://gitee.com/jixuanfan/Map-of-China/repository/archive/master.zip


          Windows或許需要安裝,那還是老老實(shí)實(shí)注冊(cè)賬號(hào),然后下載項(xiàng)目代碼。


          Mac和Linux應(yīng)該都是內(nèi)置CURL,直接使用命令就行,無(wú)需安裝。



          / 01 / 地圖數(shù)據(jù)獲取


          Get_Map,基于Python爬蟲,主要用到Selenium+正則。


          Selenium是一個(gè)用于測(cè)試網(wǎng)站的自動(dòng)化測(cè)試工具,這里我們主要是用它來(lái)模擬瀏覽器操作,進(jìn)而獲取地圖數(shù)據(jù)。


          安裝教程網(wǎng)上都有,推薦使用谷歌瀏覽器,驅(qū)動(dòng)文件和瀏覽器版本需一致。


          獲取地圖數(shù)據(jù)的兩個(gè)接口地址。


          #?首頁(yè)URL,獲取當(dāng)前所有行政區(qū)劃的代碼
          http://xzqh.mca.gov.cn/map

          #?查詢URL,獲取國(guó)家或省市的具體地圖數(shù)據(jù)
          http://xzqh.mca.gov.cn/defaultQuery?


          首先是獲取行政區(qū)劃的代碼,最小應(yīng)該是到縣一級(jí)。


          繪制不同類型的地圖,所需要的數(shù)據(jù)獲取函數(shù)如下。


          行政代碼不清楚,網(wǎng)上查詢一下就好咯~


          import?Map_of_China?as?Map

          #?創(chuàng)建獲取地圖數(shù)據(jù)對(duì)象
          M=Map.Get_Map()

          #?獲取首頁(yè)全國(guó)各省的地圖數(shù)據(jù)
          M.Get_country()

          #?獲取一組省份內(nèi)各地級(jí)行政區(qū)劃的數(shù)據(jù)
          M.Get_provinces([32,43])

          #?自動(dòng)獲取全國(guó)尚未獲取的省份數(shù)據(jù)
          M.Get_provinces_auto()

          #?獲取一組地級(jí)市內(nèi)各縣級(jí)行政區(qū)劃的數(shù)據(jù)
          M.Get_cities([3201,3203])

          #?自動(dòng)獲取某個(gè)省尚未獲取的縣級(jí)行政區(qū)劃數(shù)據(jù)
          M.Get_cities_auto(32)

          #?獲取全國(guó)所有縣級(jí)行政區(qū)劃的數(shù)據(jù)(合并在一張地圖中)
          M.Get_country_county()


          數(shù)據(jù)主要包括形狀、形狀顏色、形狀輪廓、文字、文字位置、標(biāo)注點(diǎn)形狀、標(biāo)注點(diǎn)位置等。



          具體爬取代碼、數(shù)據(jù)解析及函數(shù)的相關(guān)參數(shù),查看Map_of_China.py文件可知。



          / 02 /? 地圖數(shù)據(jù)呈現(xiàn)


          Draw_Map,基于Matplotlib繪制地圖。


          01. 繪制省/地級(jí)/縣級(jí)行政區(qū)劃的輪廓


          import?Map_of_China?as?Map

          #?創(chuàng)建獲取地圖數(shù)據(jù)對(duì)象
          M?=?Map.Get_Map()
          #?創(chuàng)建繪制地圖對(duì)象
          D?=?Map.Draw_Map()


          #?#獲取首頁(yè)全國(guó)各省的地圖數(shù)據(jù)
          M.Get_country()
          #?江蘇地圖
          D.Draw_single_shape('Data/Country/320000.txt',?LC=[116,?169,?221],
          ???????????????????????????????????FC=[96,?139,?219],?BC='w',?lw=2,?title='江蘇輪廓',
          ???????????????????????????????????img_path='jiansu.jpg')


          #?獲取各省份內(nèi)各地級(jí)行政區(qū)劃的數(shù)據(jù)
          M.Get_provinces([32])
          #?南京地圖
          D.Draw_single_shape('Data/Province/32-江蘇/320100.txt',?LC='k',?FC=None,?
          ???????????????????????????????????title='南京輪廓',?img_path='nanjing.jpg')


          得到結(jié)果如下。


          函數(shù)可設(shè)置的參數(shù),有線條、填充、背景顏色,以及線寬、標(biāo)題、圖片保存路徑等。



          02. 繪制全國(guó)地圖


          import?Map_of_China?as?Map

          #?創(chuàng)建獲取地圖數(shù)據(jù)對(duì)象
          M?=?Map.Get_Map()
          #?創(chuàng)建繪制地圖對(duì)象
          D?=?Map.Draw_Map()


          #?繪制全國(guó)地圖
          D.Draw_country(FC=True,?img_path='china.jpg',?arg={'provName':?False,
          ?????????????????????????'city_name':?True,?'city_pos':?True,?'sea':?False},?title='中國(guó)地圖')


          因?yàn)榍懊嬉呀?jīng)把全國(guó)的地圖數(shù)據(jù)爬取下來(lái),所以這里就省去了下載數(shù)據(jù)的代碼。


          得到結(jié)果如下。



          配色方案,默認(rèn)設(shè)置為民政部官網(wǎng)上的配色。



          有一些參數(shù)和輪廓圖相同,不過(guò)也添加了一些新的參數(shù)。


          比如南海地圖位置,顯示省份名稱,省份名稱顏色等。


          03. 繪制省份地圖


          import?Map_of_China?as?Map

          #?創(chuàng)建獲取地圖數(shù)據(jù)對(duì)象
          M?=?Map.Get_Map()
          #?獲取廣東省份內(nèi)各地級(jí)行政區(qū)劃的數(shù)據(jù)
          M.Get_provinces([44])

          #?創(chuàng)建繪制地圖對(duì)象
          D?=?Map.Draw_Map()

          #?繪制廣東省地圖
          D.Draw_province('廣東',?FC=True,?LC='w',?arg={'other':?True,?'city_pos':?True,?'city_name':?True},
          ????????????????????????????img_path='guangdong.jpg')


          對(duì)于省份數(shù)據(jù),前面小F只爬取了江蘇省,所以這里需要爬取廣東省的地圖數(shù)據(jù)才行。


          得到結(jié)果如下。



          繪制省份地圖函數(shù)對(duì)應(yīng)的參數(shù)有。


          code可為省份的2位編碼或者名稱,此處設(shè)置為「廣東」。


          函數(shù)還包含繪制熱力圖的參數(shù),data和by_val。


          arg中的other設(shè)置為False時(shí),表現(xiàn)不顯示周圍省份或城市的地圖,默認(rèn)參數(shù)為True,即顯示。



          04. 地級(jí)行政單位地圖


          import?Map_of_China?as?Map

          #?創(chuàng)建獲取地圖數(shù)據(jù)對(duì)象
          M?=?Map.Get_Map()
          #?獲取南京、深圳行政區(qū)劃的數(shù)據(jù)
          M.Get_cities([3201,?4403])

          #?創(chuàng)建繪制地圖對(duì)象
          D?=?Map.Draw_Map()

          #?南京地圖(默認(rèn)樣式)
          D.Draw_city('3201',?img_path='nanjing_city.jpg')

          #?深圳地圖(自定義樣式)
          D.Draw_city('深圳',?FC=True,?LC='w',?arg={'other':?True,?'city_pos':?True,?'city_name':?True},
          ?????????????????????img_path='shenzhen.jpg')


          得到結(jié)果如下。



          此處code為地級(jí)市的四位編碼。



          05. 繪制熱力圖

          將不同區(qū)域按值的大小填充不同顏色,可惜少了圖例。

          import?Map_of_China?as?Map

          #?創(chuàng)建獲取地圖數(shù)據(jù)對(duì)象
          M?=?Map.Get_Map()
          #?創(chuàng)建繪制地圖對(duì)象
          D?=?Map.Draw_Map()

          #?文件路徑
          src?=?'Example/GDP-2018.csv'
          #?按數(shù)據(jù)的相對(duì)大小(排名)顯示
          D.Show_data(src,?by_val=False,?arg={'default_color':?[0.6,?0.6,?0.6],?'sea':?False},
          ?????????????????????img_path='gdp.jpg',?title='2018年各省市GDP')


          得到結(jié)果如下。



          CSV文件具體內(nèi)容格式如下。



          第一列為區(qū)域名稱或者編碼,第二列為數(shù)值。


          數(shù)據(jù)處理模塊Map_of_China.py文件中。



          參數(shù)by_val,絕對(duì)大小和相對(duì)大小,通常應(yīng)該都會(huì)選擇絕對(duì)大小這種方式展示的。


          就是作者的這個(gè)熱力圖,是沒(méi)有圖例的,等待更新~


          #?省級(jí)數(shù)據(jù)
          D.Show_data('Example/江蘇人口2018.txt',?'32',?by_val=True,?title='江蘇人口2018',
          ????????????img_path='jiangsu_2018_1.jpg')
          #?配置地圖中的樣式
          D.Show_data('Example/江蘇人口2018.txt',?'32',?by_val=True,?LC='w',?title='江蘇人口2018',
          ????????????arg={'city_name':?True,?'city_pos':?True,?'other':?True},
          ????????????img_path='jiangsu_2018_2.jpg')


          TXT格式的數(shù)據(jù)也能使用。



          06. 繪制氣泡圖


          #?氣泡圖
          D.Bubble(src='Example/GDP-2018.csv',?title='2018年各省市GDP',?img_path='GDP_bubble.png')


          得到結(jié)果如下。


          氣泡顏色默認(rèn)為黃色,可自定義參數(shù)。



          發(fā)現(xiàn)和Pyecharts好像,相信在修改地圖配色、文本字體及位置后,地圖會(huì)變得更好看!


          不過(guò)限于時(shí)間,下期小F再來(lái)說(shuō)一說(shuō)~



          還有幾個(gè)功能,坐等大佬更新~


          相關(guān)代碼及文件我已上傳公眾號(hào),回復(fù)「地圖」即可獲取。


          如此就不需要你自己注冊(cè)賬號(hào),直接就能使用。


          萬(wàn)水千山總是情,點(diǎn)個(gè)? ?? 行不行。


          -END-




          掃碼添加早小起,進(jìn)入Python技術(shù)交流群


          瀏覽 35
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日批免费观看 | 免费的操逼视频 | 久草福利在线观看 | 午夜精品18 视频国产 | 亚洲三级片无码高清 |