麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

python繪制中國大陸人口熱力圖

2020-02-15 23:32:47
字體:
來源:轉載
供稿:網友

這篇文章給出了如何繪制中國人口密度圖,但是運行存在一些問題,我在一些地方進行了修改。

本人使用的IDE是anaconda,因此事先在anaconda prompt 中安裝Basemap包

conda install Basemap

新建文檔,導入需要的包

import matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemapfrom matplotlib.patches import Polygonfrom matplotlib.colors import rgb2heximport numpy as npimport pandas as pd

Basemap中不包括中國省界,需要在下面網站下載中國省界,點擊Shapefile下載。

生成中國大陸省界圖片。

plt.figure(figsize=(16,8))m = Basemap( llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)m.drawcountries(linewidth=1.5)m.drawcoastlines() m.readshapefile('gadm36_CHN_shp/gadm36_CHN_1', 'states', drawbounds=True)

去國家統計局網站下載人口各省,只需保留地區和總人口即可,保存為csv格式并改名為pop.csv。

讀取數據,儲存為dataframe格式,刪去地名之中的空格,并設置地名為dataframe的index。

df = pd.read_csv('pop.csv')new_index_list = []for i in df["地區"]: i = i.replace(" ","") new_index_list.append(i)new_index = {"region": new_index_list}new_index = pd.DataFrame(new_index)df = pd.concat([df,new_index], axis=1)df = df.drop(["地區"], axis=1)df.set_index("region", inplace=True)

將Basemap中的地區與我們下載的csv中的人口數據對應起來,建立字典。注意,Basemap中的地名與csv文件中的地名并不完全一樣,需要進行一些處理。

provinces = m.states_infostatenames=[]colors = {}cmap = plt.cm.YlOrRdvmax = 100000000vmin = 3000000 for each_province in provinces: province_name = each_province['NL_NAME_1'] p = province_name.split('|') if len(p) > 1:  s = p[1] else:  s = p[0] s = s[:2] if s == '黑龍':  s = '黑龍江' if s == '內蒙':  s = '內蒙古' statenames.append(s) pop = df['人口數'][s] colors[s] = cmap(np.sqrt((pop - vmin) / (vmax - vmin)))[:3]

最后畫出圖片即可

ax = plt.gca()for nshape, seg in enumerate(m.states): color = rgb2hex(colors[statenames[nshape]]) poly = Polygon(seg, facecolor=color, edgecolor=color) ax.add_patch(poly) plt.show()

完整代碼如下

# -*- coding: utf-8 -*- import matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemapfrom matplotlib.patches import Polygonfrom matplotlib.colors import rgb2heximport numpy as npimport pandas as pd plt.figure(figsize=(16,8))m = Basemap( llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)m.drawcountries(linewidth=1.5)m.drawcoastlines() m.readshapefile('gadm36_CHN_shp/gadm36_CHN_1', 'states', drawbounds=True) df = pd.read_csv('pop.csv')new_index_list = []for i in df["地區"]: i = i.replace(" ","") new_index_list.append(i)new_index = {"region": new_index_list}new_index = pd.DataFrame(new_index)df = pd.concat([df,new_index], axis=1)df = df.drop(["地區"], axis=1)df.set_index("region", inplace=True) provinces = m.states_infostatenames=[]colors = {}cmap = plt.cm.YlOrRdvmax = 100000000vmin = 3000000 for each_province in provinces: province_name = each_province['NL_NAME_1'] p = province_name.split('|') if len(p) > 1:  s = p[1] else:  s = p[0] s = s[:2] if s == '黑龍':  s = '黑龍江' if s == '內蒙':  s = '內蒙古' statenames.append(s) pop = df['人口數'][s] colors[s] = cmap(np.sqrt((pop - vmin) / (vmax - vmin)))[:3] ax = plt.gca()for nshape, seg in enumerate(m.states): color = rgb2hex(colors[statenames[nshape]]) poly = Polygon(seg, facecolor=color, edgecolor=color) ax.add_patch(poly) plt.show()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲午夜久久久久 | 激情小说激情图片激情电影 | 小雪奶水翁胀公吸小说最新章节 | av在线播放亚洲 | 中文字幕精品一二三四五六七八 | 亚洲va久久久噜噜噜久久男同 | 国产精品99久久久久久大便 | 亚洲一级片在线观看 | a集毛片 | av中文字幕免费在线观看 | 91成| aa国产视频一区二区 | 99极品视频 | 久久国产精品影视 | 欧美日韩在线视频一区 | 激情小说激情图片激情电影 | 欧美一级黄色片免费观看 | 久久精品9 | 3344永久免费 | 一色视频 | 欧美特黄特色视频 | 欧美成人国产va精品日本一级 | av手机免费在线观看 | h视频免费在线观看 | 欧日韩在线 | 最近免费观看高清韩国日本大全 | 精国产品一区二区三区 | 狠狠干五月天 | 久久久久亚洲a | 欧美性生活视频免费看 | 亚洲自拍第二页 | 黄色av免费 | 国产精品久久久久久久不卡 | 一级看片免费视频 | 中国hd高清xxxxvideo | 一级α片免费看刺激高潮视频 | 午夜影院在线免费观看 | hd日本xxxx| 91午夜免费视频 | 精品黑人一区二区三区国语馆 | 国内性爱视频 |