这篇文章给出了如何绘制中国人口密度图,但是运行存在一些问题,我在一些地方进行了修改。

本人使用的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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

python编写人口预测图_python绘制中国大陆人口热力图相关推荐

  1. python第三方库大概有多少人口_python绘制中国大陆人口热力图

    这篇文章给出了如何绘制中国人口密度图,但是运行存在一些问题,我在一些地方进行了修改. 本人使用的IDE是anaconda,因此事先在anaconda prompt 中安装Basemap包 conda ...

  2. python人口热力图_利用Python绘制中国大陆人口热力图

    https://mp.weixin.qq.com/s/Bh-L3syzJSHhLPZqzHvIyA 这篇文章给出了如何绘制中国人口密度图,但是运行存在一些问题,我在一些地方进行了修改. 本人使用的ID ...

  3. 利用Python绘制中国大陆人口热力图

    https://mp.weixin.qq.com/s/Bh-L3syzJSHhLPZqzHvIyA 这篇文章给出了如何绘制中国人口密度图,但是运行存在一些问题,我在一些地方进行了修改. 本人使用的ID ...

  4. python画k线图_Python绘制K线图

    不管是对量化分析师还是普通的投资者来说,K线图(蜡烛图)都是一种很经典.很重要的工具.在K线图中,它会绘制每天的最高价.最低价.开盘价和收盘价,这对于我们理解股票的趋势以及每天的多空对比很有帮助. 一 ...

  5. python画球轨迹图_python绘制铅球的运行轨迹代码分享

    我们按照面向过程程序设计的思想,使用python编写了程序,追踪铅球在运行过程中的位置信息.下面,修改程序代码,导入turtle模块,将铅球的运行轨迹绘制出来. python3代码如下: from m ...

  6. python编写人口预测图_Python可视化神器——pyecharts(实例之人口地图)

    官方教程:http://pyecharts.herokuapp.com/ pyecharts 是一个用于生成 Echarts 图表的类库.Echarts 是百度开源的一个数据可视化 JS 库.用 Ec ...

  7. 利用python获取股票折线图_python绘制香农的投资组合折线图

    写在前面 最近在看<赌神数学家>这本书,在此书的第四部分"圣彼得堡悖论的故事"的"香农的恶魔"这一小节中,讲了香农自己对于股票的投资策略.在这一小节 ...

  8. python分析数据走势图_python绘制趋势图的示例

    import matplotlib.pyplot as plt #plt用于显示图片 import matplotlib.image as mping #mping用于读取图片 import date ...

  9. python画条状图_Python 绘制分组条形图

    借助 pandas 绘制分组条形图 1. 示例 1 使用默认颜色 代码 importmatplotlib.pyplot as plt importnumpy as np importpandas as ...

最新文章

  1. 微软拟对Office 2007增添新功能 增强安全性
  2. 只因这个模型,它 1 年增长 44%,收入达 2.15 亿美元
  3. happens-before规则和as-if-serial语义
  4. UVA 10891 SUM游戏 DP
  5. PIR 宣布被营利性机构收购,.org 顶级域名注册费用或上涨
  6. 红帽为开发订阅成员提供的免费福利
  7. mathematica完爆matlab,Mathematica和Matlab相比的计算效率问题
  8. instagram怎么用_用PHP和Instagram API征服Instagram
  9. unicode字符集和utf-8编码
  10. OA系统如何助力企业行政管理?
  11. 4-google translate插件安装及使用
  12. android viewpager中每个view,ViewPager系列之 打造一个通用的ViewPager
  13. 建模你不能不知道这些网站能接单 | 建议收藏
  14. Set集合的基本使用
  15. iPhone手机忘记了ID账号密码怎么办
  16. 国密算法TF32A09硬件加密芯片
  17. Android 曝光采集(商品view曝光量的统计)
  18. fanfou.com
  19. 下载的文件需要右键属性解除锁定的一次性解决方法
  20. 如何启动 与配置tomcat 服务端,修改startup.bat乱码现象

热门文章

  1. Django在form提交CSRF验证失败. 相应中断问题
  2. Windows 安装AirSim
  3. ​DaVinci:运动特效
  4. Scala 常用Sort排序
  5. linux查找大文件指定内容
  6. mysql gtids_Mysql基于GTIDs的复制
  7. 考试题目“笨笨的西瓜种植”
  8. java-byte转换16进制,10进制,2进制,BCD,ASCII等
  9. 443端口被占用的解决方案
  10. JavaScript中字符串比较大小