利用Python绘制中国大陆人口热力图
https://mp.weixin.qq.com/s/Bh-L3syzJSHhLPZqzHvIyA
这篇文章给出了如何绘制中国人口密度图,但是运行存在一些问题,我在一些地方进行了修改。
本人使用的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中不包括中国省界,需要在下面网站下载中国省界(https://gadm.org/download_country_v3.html),点击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)
去国家统计局网站下载人口各省(http://www.stats.gov.cn/tjsj/pcsj/rkpc/6rp/indexce.htm),只需保留地区和总人口即可,保存为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 = 3000000for 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 pdplt.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 = 3000000for 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()
利用Python绘制中国大陆人口热力图相关推荐
- python人口热力图_利用Python绘制中国大陆人口热力图
https://mp.weixin.qq.com/s/Bh-L3syzJSHhLPZqzHvIyA 这篇文章给出了如何绘制中国人口密度图,但是运行存在一些问题,我在一些地方进行了修改. 本人使用的ID ...
- python第三方库大概有多少人口_python绘制中国大陆人口热力图
这篇文章给出了如何绘制中国人口密度图,但是运行存在一些问题,我在一些地方进行了修改. 本人使用的IDE是anaconda,因此事先在anaconda prompt 中安装Basemap包 conda ...
- python编写人口预测图_python绘制中国大陆人口热力图
这篇文章给出了如何绘制中国人口密度图,但是运行存在一些问题,我在一些地方进行了修改. 本人使用的IDE是anaconda,因此事先在anaconda prompt 中安装Basemap包 conda ...
- 利用Python绘制中国新型冠状病毒疫情图(国家和省)
大数据课程设计上来就要求绘制一个地图可以反应出来中国各个省份每日疫情的人数,包括确诊,疑似,死亡,治愈.如下图所示: 这里用到了Python中的pyecharts库,点此了解详细信息 1.先来将需要的 ...
- python动态演示数据gdp_利用Python制作中国GDP分布图和动态演示
利用Python制作中国GDP分布图和动态演示 数据读取 ## 导入相关模块import pandas as pdimport geopandas as gpdimport numpy as np i ...
- 利用Python制作中国GDP分布图和动态演示
利用Python制作中国GDP分布图和动态演示 数据读取 ## 导入相关模块 import pandas as pd import geopandas as gpd import numpy as n ...
- 怎么用python找论文_如何利用Python绘制学术论文图表方法
论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...
- python画曲线图-利用python绘制数据曲线图的实现
"在举国上下万众一心.众志成城做好新冠肺炎疫情防控工作的特殊时刻,我们不能亲临主战场,但我们能坚持在大战中坚定信心.不负韶华." 1.爬取新闻保存为json文件,并将绘图所需数据保 ...
- python canvas画弧度_编程作战丨如何利用python绘制可爱皮卡丘?
好莱坞真人电影<精灵宝可梦:大侦探皮卡丘>预告片已经发布了,正片将于今年5月10日上映. 如果要做一个「童年梦想排行榜」的话,相信「拥有一只皮卡丘」这个梦想一定会名列前茅! 毕竟,谁不想揉 ...
最新文章
- callable函数 stride的意义 Math.round(),Math.ceil(),Math.floor()用法
- 指针:调用自定义交换函数,完成三个数整从小到大排列
- 【字符比较】单字符比较值是否相等
- 创建微服务架构的步骤_成功备战微服务的5个准备步骤
- ASP.NET Core gRPC 使用 Consul 服务注册发现
- python3.5学习笔记:linux6.4 安装python3 pip setuptools
- linux宝塔登录不上去怎么回事,宝塔面板点击登陆没有用怎么办
- RiPro小八子主题V1.5.5美化版+优惠码折扣+工单系统+任务系统
- Windows2003四大必知版本
- Kubernetes 小白学习笔记(31)--kubernetes云原生应用开发-istio架构和安装
- 如何自定义cad线型_百度经验.html,如何找到自己需要的CAD线型?教你怎样自定义CAD线型...
- 记一次勒索病毒攻击事件的处理过程
- 用计算机配置打印机IP,如何修改打印机IP地址?
- [ERP/鼎捷E10][计划管理]主生产计划MPS
- x=rn(n)傅里叶变换matlab,第三章 离散傅立叶变换
- Android中使用AudioManager实现按键录音并保存以及点击播放功能
- 小程序支付“”商户号该产品权限未开通,请前往商户平台产品中心检查后重试“”解决方案
- 学会了C语言究竟能干什么呢?
- 从纯洁男孩到堕落男人
- 我的android足迹