国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 友谊县| 始兴县| 织金县| 贡觉县| 绥德县| 肥乡县| 仁怀市| 文登市| 湖口县| 安新县| 彰化市| 河曲县| 涪陵区| 晋中市| 康乐县| 象州县| 镶黄旗| 定日县| 桑日县| 巫溪县| 中西区| 新巴尔虎右旗| 文安县| 临邑县| 靖西县| 汤原县| 抚远县| 和龙市| 隆尧县| 浦县| 巫山县| 铜川市| 时尚| 宜城市| 霍城县| 丹寨县| 长葛市| 合肥市| 渝北区| 长春市| 枣强县|