python绘制中国大陆人口热力图

 更新时间:2018年11月07日 08:36:07   作者:qq_41816368  
这篇文章主要为大家详细介绍了Python绘制中国大陆人口热力图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

本人使用的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中pandas的安装操作说明(傻瓜版)

    详解Python中pandas的安装操作说明(傻瓜版)

    这篇文章主要介绍了Python中pandas的安装操作说明,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 深入分析在Python模块顶层运行的代码引起的一个Bug

    深入分析在Python模块顶层运行的代码引起的一个Bug

    几个星期前, 我的同事跑过来, 说发现一个奇怪的Bug: 在使用Python的subprocess运行子进程时, 当子进程运行失败时居然没有抛出错误!
    2014-07-07
  • 用 Python 绘制全国鸿星尔克门店分布图

    用 Python 绘制全国鸿星尔克门店分布图

    这篇文章主要介绍了用 Python 绘制全国鸿星尔克门店分布图,今天就以某度地图 用Python爬虫看一下全国到底有多少家鸿星尔克门店,,需要的朋友可以参考一下
    2022-01-01
  • python中强大的format函数实例详解

    python中强大的format函数实例详解

    python中format函数用于字符串的格式化,这篇文章主要介绍了python中强大的format函数,需要的朋友可以参考下
    2018-12-12
  • Python中那些简单又好用的特性和用法盘点

    Python中那些简单又好用的特性和用法盘点

    这篇文章主要为大家详细介绍了在编写Python代码过程中用到的几个简单又好用的特性和用法,这些特性和用法可以帮助我们更高效地编写Python代码,希望对大家有所帮助
    2024-03-03
  • pytorch 实现模型不同层设置不同的学习率方式

    pytorch 实现模型不同层设置不同的学习率方式

    今天小编就为大家分享一篇pytorch 实现模型不同层设置不同的学习率方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python tkinter窗口最大化的实现

    python tkinter窗口最大化的实现

    这篇文章主要介绍了python tkinter窗口最大化的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python3 执行Linux Bash命令的方法

    Python3 执行Linux Bash命令的方法

    今天小编就为大家分享一篇Python3 执行Linux Bash命令的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python中requests做接口测试的方法

    Python中requests做接口测试的方法

    Requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到,本文主要介绍了Python中requests做接口测试的方法,感兴趣的可以了解一下
    2021-05-05
  • Python requests的SSL证书验证方式

    Python requests的SSL证书验证方式

    这篇文章主要介绍了Python-requests的SSL证书验证方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02

最新评论