这篇文章给出了如何绘制中国人口密度图,但是运行存在一些问题,我在一些地方进行了修改。
本人使用的IDE是anaconda,因此事先在anaconda prompt 中安装Basemap包
conda install Basemap
新建文档,导入需要的包
import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap from matplotlib.patches import Polygon from matplotlib.colors import rgb2hex import numpy as np import 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_info statenames=[] colors = {} cmap = plt.cm.YlOrRd vmax = 100000000 vmin = 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 plt from mpl_toolkits.basemap import Basemap from matplotlib.patches import Polygon from matplotlib.colors import rgb2hex import numpy as np import 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_info statenames=[] colors = {} cmap = plt.cm.YlOrRd vmax = 100000000 vmin = 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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“python绘制中国大陆人口热力图”评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
2024年11月26日
2024年11月26日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]