利用Python制作中国GDP分布图和动态演示

数据读取

## 导入相关模块
import pandas as pd
import geopandas as gpd
import numpy as np
import matplotlib.pyplot as plt
from shapely.geometry import Point
import matplotlib.patches as mpatches
from mpl_toolkits.basemap import Basemap
from matplotlib_scalebar.scalebar import ScaleBar
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']# 替换sans-serif字体为黑体
plt.rcParams['axes.unicode_minus'] = False   # 解决坐标轴负数的负号显示问题
regibns = gpd.GeoDataFrame.from_file("F:\ArcGIS\ArcGIS文件\全国\中国地图\省级行政区.shp")
regibns.plot()

## 查看坐标系
regibns.crs

## 绘制国界线
nine_lines = gpd.read_file('F:\ArcGIS\ArcGIS文件\全国\中国地图\国界线.shp')
nine_lines.plot()

## 经纬网
jingwei = gpd.GeoDataFrame.from_file('F:\ArcGIS\ArcGIS文件\全国\中国地图\经纬网.shp')
fig = plt.figure(figsize=(8,8)) #设置画布大小
ax = plt.gca()
regibns.plot(ax=ax)
jingwei.plot(ax=ax)
nine_lines.plot(ax=ax)

taiwan = gpd.GeoDataFrame.from_file("F:\ArcGIS\ArcGIS文件\全国\中国地图\省级行政区.shp")
taiwan = taiwan[regibns['NAME'].isin(['台湾'])]
taiwan.plot()

数据清洗

regibns = regibns[['GDP_1994(','GDP_1997(','GDP_1998(','GDP_1999(','GDP_2000(','NAME',
'geometry']]
regibns = regibns.rename(columns={'GDP_1994(':'GDP_1994','GDP_1997(':'GDP_1997','GDP_1998(':'GDP_1998','GDP_1999(':'GDP_1999','GDP_2000(':'GDP_2000'})
regibns.head()

data = pd.read_excel('中国各省GDP.xlsx')
data.shape

data.head()

数据连接

GDP = pd.merge(regibns,data,on='NAME') ## 连接
GDP.head()

绘图

## 绘制中国2020年GDP分布图
fig = plt.figure(figsize=(12,12)) #设置画布大小
ax = plt.gca()
ax.set_title("中国2020年各省级行政单位GDP分布图(单位:亿元)",fontsize=24,loc='center')regibns['coords'] = regibns['geometry'].apply(lambda x: x.representative_point().coords[0])
for n, i in enumerate(regibns['coords']):plt.text(i[0], i[1], regibns['NAME'][n], size=12)# 主图绘制
GDP.plot(ax=ax,column='GDP_2020',scheme='quantiles',legend=True,linewidth=0.5,cmap='Reds',edgecolor='k',
legend_kwds={'loc': 'lower left','title': '图例','shadow': True,'fontsize':12,'frameon':True,'prop':{'family': 'Times New Roman', 'weight': 'normal', 'size': 12}})
jingwei.plot(ax=ax,linewidth=2,alpha=0.5,edgecolor='black')
nine_lines.plot(ax=ax,edgecolor='black',linewidth=2,alpha=0.5)
taiwan.plot(ax=ax,hatch= "",label= "缺失值",facecolor='lightgrey')# 副图框绘制
ax_child = fig.add_axes([0.72, 0.20, 0.15, 0.15]) # left, bottom, width, heightGDP.plot(ax=ax_child,color='#E24A33',edgecolor='grey',linewidth=0.5)
GDP.plot(ax=ax_child,color='#348ABD',edgecolor='grey',linewidth=0.5)ax_child = nine_lines.geometry.plot(ax=ax_child,edgecolor='black',linewidth=2,alpha=0.5)
taiwan.plot(ax=ax_child,hatch= "",label= "缺失值",facecolor='lightgrey')ax_child.set(xlim=(0*10**6,2*10**6),ylim=(0*10**6,2.8*10**6))ax_child.set_xticks([])
ax_child.set_yticks([])# 额外图例绘制
p1=gpd.GeoDataFrame({'geometry':[Point(-1.60*10**6,-0.1*10**6)]})
p1.plot(ax=ax,markersize=100,facecolor='lightgrey',hatch= "")
ax.text(-1.54*10**6,-0.15*10**6, "NoData",{'family': 'Times New Roman', 'weight': 'normal', 'size': 12})# 添加比例尺
scalebar = ScaleBar(dx=1*10**-3,units='km',length_fraction=0.1,font_properties={'family': 'Times New Roman', 'weight': 'normal', 'size': 12},location=8,sep=1,frameon=False)
ax.add_artist(scalebar)# 添加指北针
x, y, arrow_length = 0.42, 0.09, 0.07
ax.annotate('N', xy=(x, y), xytext=(x, y-arrow_length),arrowprops=dict(facecolor='black', width=4, headwidth=7),ha='center', va='center', fontsize=10,xycoords=ax.transAxes)# plt.savefig('中国2020年各省级行政单位GDP分布图.png',dpi=300)

批量出图

为了出图方便、可控、美观,所以有所简略。

reg = GDP.copy() ##好习惯,数据不干扰
## 列表表达式
data_plot = [('GDP_1994','中国1994年GDP分布图(单位:亿元)'),
('GDP_1997','中国1997年GDP分布图(单位:亿元)'),
('GDP_1998','中国1998年GDP分布图(单位:亿元)'),
('GDP_1999','中国1999年GDP分布图(单位:亿元)'),
('GDP_2000','中国2000年GDP分布图(单位:亿元)'),
('GDP_2010','中国2010年GDP分布图(单位:亿元)'),
('GDP_2019','中国2019年GDP分布图(单位:亿元)'),
('GDP_2020','中国2020年GDP分布图(单位:亿元)'),]
## 批量出图,不要忘记台湾
for m, cal in enumerate(data_plot):reg['coords'] = reg['geometry'].apply(lambda x: x.representative_point().coords[0])ax = reg.plot(figsize=(10, 10), column=cal[0], scheme='quantiles', legend=True, cmap='Reds', edgecolor='k')taiwan.plot(ax=ax,hatch= "",label= "缺失值",facecolor='lightgrey')for n, i in enumerate(regibns['coords']):plt.text(i[0], i[1], regibns['NAME'][n], size=12)plt.title(cal[1],size=20)plt.grid(True, alpha=0.3)# plt.savefig(str(m)+'.png',dpi=300)

## 绘制子图
fig=plt.figure(figsize=(15,30))
for m, cal in enumerate(data_plot):reg['coords'] = reg['geometry'].apply(lambda x: x.representative_point().coords[0])ax = reg.plot(ax=plt.subplot(4,2,m+1),column=cal[0],figsize = (10,10), scheme='quantiles', legend=True, cmap='Reds', edgecolor='k')taiwan.plot(ax=ax,hatch= "",label= "缺失值",facecolor='lightgrey')for n, i in enumerate(regibns['coords']):plt.text(i[0], i[1], regibns['NAME'][n], size=12)#plt.subplots_adjust(bottom=0.1, right=0.6, top=0.5)plt.title(cal[1],size=20)plt.grid(True, alpha=0.3)
plt.savefig('中国GDP演变图2.png',dpi=300)

制作动图

## 创建文件夹夹
def mkdir(path):folder = os.path.exists(path)if not folder:  # 判断是否存在文件夹如果不存在则创建为文件夹os.makedirs(path)  # makedirs 创建文件时如果路径不存在会创建这个路径print("---  new folder...  ---")print("---  OK  ---")else:print("---  There is this folder!  ---")file = r'F:\ArcGIS\ArcGIS文件\全国\中国地图ArcGIS练习数据\代码\photo'
mkdir(file)  # 调用函数
## 复制文件
import shutil
array = np.arange(9)
ls=list(array)
rs=map(str,ls)
path=r'F:\ArcGIS\ArcGIS文件\全国\中国地图ArcGIS练习数据\代码'  #待读取的文件夹
root = 'F:\ArcGIS\ArcGIS文件\全国\中国地图ArcGIS练习数据\代码\photo'num=0for num in range(8):name = str(num) + '.png'#将0-7选出来if name in os.listdir(path):#取出文件名数字部分是0-7的文件sourcefile = os.path.join(path, name)  # 拼路径print(sourcefile)shutil.copy(sourcefile, root)# 将指定的文件复制到root的文件夹里面else:print("no")

## 制作动图
#   _*_ coding:utf-8 _*_
import matplotlib.pyplot as plt
import imageio
from PIL import Image, ImageSequence
__author__ = 'admin'GIF=[]
filepath = r'F:\ArcGIS\ArcGIS文件\全国\中国地图ArcGIS练习数据\代码\photo'#文件路径
filenames=os.listdir(filepath)
for filename in os.listdir(filepath):GIF.append(imageio.imread(filepath+"\\"+filename))
imageio.mimsave(filepath+"\\"+'result.gif',GIF,duration=1)#这个duration是播放速度,数值越小,速度越快

问题和总结

PicGO的gitee不太支持太大文件的传输,CSDN也只支持5MB以内,但是简书可以超过5MB,我这次这个动图就是使用的简书。

还有就是shp文件的坐标的问题,要投影正确,图才能叠到一起。

第三就是这个GDP数据有所错误或者缺失的地方,大家谅解。

利用Python制作中国GDP分布图和动态演示相关推荐

  1. python动态演示数据gdp_利用Python制作中国GDP分布图和动态演示

    利用Python制作中国GDP分布图和动态演示 数据读取 ## 导入相关模块import pandas as pdimport geopandas as gpdimport numpy as np i ...

  2. 利用Python制作王者荣耀出装小助手,引来了老板的注意!

    导语 T_T并不玩这些游戏... 单纯来蹭个热点... 大概是因为蹭热点需要的技术含量比较低? 就这样吧~~~ 利用Python制作命令行版的王者荣耀出装小助手. Let's Go! 开发工具 Pyt ...

  3. 小哥哥你有98K吗?利用Python制作一款多功能变声器!

    前言 好吧,关于这句小哥哥你有98K吗?出自别人口中经常说的玩笑话,我也略懂一些游戏嘛.不过不常玩,废话不多说,开始咱们今天的教程,非常简单! 利用Python制作一款多功能变声器! 咱们首先登陆百度 ...

  4. python如何制作一个工程软件_如何利用python制作一个解压缩软件-Go语言中文社区...

    如何利用python制作一个解压缩软件 python实现解压缩的重要模块就是--zipfile,其次是os 安装zipfile模块 首先得安装zipfile模块,打开cmd输入一下命令即可安装 pip ...

  5. python拼图_利用python制作拼图小游戏的全过程

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 关注公众号:Python学习指南,回复"拼图"即可获取源码 环境搭建 安装P ...

  6. 用python做头像_如何利用python制作微信好友头像照片墙?

    这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...

  7. 利用Python制作第一人称射击小游戏 含源代码

    大家好 我是毕加锁 (锁!) 今天教大家利用Python制作第一人称小游戏 涉及知识点 1.sprites 2.pygame混音器 3.图章    4.python基础语法 .代码 1发射声 from ...

  8. 利用python制作转盘

    利用python制作转盘 pip install threading(pip一定要为最新版本,不然容易出错) pip install tkinter pip install pyinstaller将t ...

  9. 利用Python制作微信机器人(三)实现爬取JD商品价格

    从前两篇的博客来看,目前已经实现了机器人单向给微信发消息,和与机器人进行交互式发消息,详情如下: 利用Python制作微信机器人(一)机器人单向发消息 利用Python制作微信机器人(二)与机器人进行 ...

最新文章

  1. Java的字符串常量池
  2. excel行转列_excel统计函数:应用广泛的动态统计之王OFFSET(上)
  3. [xsy2880]取石子游戏
  4. java常见异常总结---自己工作中经常遇到的一些异常
  5. 怎么调试内存溢出的c++代码_【C/C++】内存对齐 到底怎么回事?
  6. 【渝粤题库】国家开放大学2021春1026西方经济学(本)题目
  7. mysql 连接 监控_mysql监控优化(一)连接数和缓存
  8. [emacs] Python代码补全的各种方法介绍以及对比
  9. 【转载】2008年世界最大50家石油公司综合排名(按六项指标综合测算)
  10. RHEL7.0时间同步设置
  11. ubuntu16.04 apt-get update出错:由于没有公钥,无法验证下列签名
  12. cocos 发布android 返回值2,用cocos creator打包发布的时候,编译失败是怎么回事?执行命令出错,返回值:1。...
  13. windows cl命令行编译和nmake
  14. 无线测温传感器、无线测温装置在项目上的应用—安科瑞 孙斌
  15. 卡西欧计算机设置参数,【卡西欧 fx-991CN X 中文函数计算器使用总结】参数|功能|显示|计算_摘要频道_什么值得买...
  16. 第07课:项目实战——自己动手写一个神经网络模型
  17. iMX6ul开发指导
  18. 重心法-判断一点是否在三角形内
  19. Bose SoundLink Revolve或者Bose SoundLink Revolve+ AUX音频播放一会没有声音
  20. github上三个不错的开源框架

热门文章

  1. 【blender建模功能】01 挤出类工具
  2. 决定我们人生的不是能力,而是选择
  3. 布莱顿大学有计算机游戏研究生或者动画研究生么,布莱顿大学研究生学费
  4. 链家董事长左晖:从中介向房产O2O转型
  5. 千千静听2014 v8.3.6 官方最新版
  6. 奥哲创始人兼CEO徐平俊:低代码加速企业数智化转型|2021全球数字价值峰会
  7. 【量化笔记】使用python捕捉K线图形态
  8. Banner——第四阶段考核——仿海尔商城网页
  9. 《倾世妖颜》曝光群像海报 9月27日群豪逐鹿中原
  10. Python的字符编码