绘制中国地图
引用matplotlib和cartopy

import configparser
import matplotlib
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import reader as reader
import shapely.geometry as sgeom
import cartopy.io.shapereader as shpreader
import cartopy.crs as ccrs
import cartopy.feature as cfeat
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from cartopy.io.shapereader import Reader
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import shapefile
import json
import os
import redef map_generate(dic):# 中文字体设置,防止中文乱码# 指定默认字体matplotlib.rcParams['font.sans-serif'] = ['SimHei']# 创建活动数据字典proj = ccrs.AlbersEqualArea()fig = plt.figure(figsize=(3, 3), dpi=300)  # 创建画布ax = fig.subplots(1, 1, subplot_kw={'projection': proj})  # 创建子图# 将地图的范围限制在中国范围内。ax.set_extent([-2767962, 2327067, -1911822, 2244950], crs=proj)# 添加背景蓝色矩形polygon = sgeom.Polygon([(-2767962, -1911822), (-191182, 22327067), (-2767962, 2244950), (2327067, 2244950)])ax.add_geometries([polygon], proj, facecolor='#97DBF2')# 读取世界边界信息shp_path = r'..\data\basedata\worldalbers\world_albers.shp'reader = Reader(shp_path)enshicity = cfeat.ShapelyFeature(reader.geometries(), proj, edgecolor='#686868', facecolor='w')ax.add_feature(enshicity, linewidth=0.25)# 读取国家面shp_path = r'..\data\basedata\行政边界\国界(面).shp'reader = Reader(shp_path)enshicity = cfeat.ShapelyFeature(reader.geometries(), proj, edgecolor='#686868', facecolor='w')ax.add_feature(enshicity, linewidth=0.25)# 读取国境线shp_path = r'..\data\basedata\行政边界\guojie_buffer5km.shp'reader = Reader(shp_path)enshicity = cfeat.ShapelyFeature(reader.geometries(), proj, edgecolor='#000000', facecolor='none')ax.add_feature(enshicity, linewidth=0.15)# 读取省分界线shp_path = r'..\data\basedata\行政边界\省界.shp'reader = Reader(shp_path)enshicity = cfeat.ShapelyFeature(reader.geometries(), proj, edgecolor='#686868', facecolor='none')ax.add_feature(enshicity, linewidth=0.2)# 在地图上按照经纬度标识出省会城市f = open(r'..\data\basedata\行政边界\省会.json', encoding='utf-8')shenghui = json.loads(f.read())f.close()for point in shenghui:cord = point['cord']ax.text(cord[0], cord[1], point['NAME'], verticalalignment='center', horizontalalignment='center',transform=proj, fontsize=3, color='k', family='Simsun')# 在画布中添加南海诸岛白色背景矩形polygon = sgeom.Polygon([(-2710000, -1861822), (-2011822, -1861822), (-2011822, -980000), (-2710000, -980000)])ax.add_geometries([polygon], proj, facecolor='white', edgecolor='#000000', linewidth=0.1)# 读取南海诸岛信息,并在左下角小画布中展出shp_path = r'..\data\basedata\行政边界\SouthSea_L.shp'reader = Reader(shp_path)enshicity = cfeat.ShapelyFeature(reader.geometries(), proj, edgecolor='#000000', facecolor='none')ax.add_feature(enshicity, linewidth=0.2)# 读取河流信息,将河流画出shp_path = r'..\data\basedata\河流\一级河流5\一级河流5.shp'reader = Reader(shp_path)enshicity = cfeat.ShapelyFeature(reader.geometries(), proj, edgecolor='b', facecolor='none')ax.add_feature(enshicity, linewidth=0.15)# 在画布中添加矩形polygon = sgeom.Polygon([(-1867962, -1851822), (-1011822, -1851822), (-1011822, -1100000), (-1867962, -1100000)])ax.add_geometries([polygon], proj, facecolor='white', edgecolor='#000000', linewidth=0.2)# 添加图例中矩形色块red_polygon = sgeom.Polygon([(-1837962, -1351822), (-1590000, -1351822), (-1590000, -1240000), (-1837962, -1240000)])ax.add_geometries([red_polygon], proj, facecolor='r')orange_polygon = sgeom.Polygon([(-1837962, -1501822), (-1590000, -1501822), (-1590000, -1390000), (-1837962, -1390000)])ax.add_geometries([orange_polygon], proj, facecolor='#FFAA01')y_polygon = sgeom.Polygon([(-1837962, -1651822), (-1590000, -1651822), (-1590000, -1540000), (-1837962, -1540000)])ax.add_geometries([y_polygon], proj, facecolor='#FFFF00')b_polygon = sgeom.Polygon([(-1837962, -1801822), (-1590000, -1801822), (-1590000, -1690000), (-1837962, -1690000)])ax.add_geometries([b_polygon], proj, facecolor='b')# 添加图例中文字内容plt.text(x=-1847962,y=-1200000,s='图 例',fontdict=dict(fontsize=3,color='k',family='Simsun'))plt.text(x=-1557962,y=-1340000,s='风险很高',fontdict=dict(fontsize=3,color='k',family='Simsun'))plt.text(x=-1557962,y=-1490000,s='风险高',fontdict=dict(fontsize=3,color='k',family='Simsun'))plt.text(x=-1557962,y=-1640000,s='风险较高',fontdict=dict(fontsize=3,color='k',family='Simsun'))plt.text(x=-1557962,y=-1790000,s='有一定风险',fontdict=dict(fontsize=3,color='#000000',family='Simsun'))# 添加大标题和小标题plt.text(x=-1907962,y=1900000,s=dic['first_title'],fontdict=dict(fontsize=6,color='k',family='Simsun'))plt.text(x=-1117962,y=1609000,s=dic['second_title'],fontdict=dict(fontsize=4.5,color='k',family='Simsun'))plt.text(x=-557962,y=1259000,s=dic['third_title'],fontdict=dict(fontsize=6,color='k',family='SimHei'))# 发布时间信息plt.text(x=1211822,y=-1544950,s=dic['date'] + '发布',fontdict=dict(fontsize=3,color='k',family='Simsun'),bbox={'facecolor': 'w',  # 填充色'edgecolor': 'w',  # 外框色'alpha': 1,  # 框透明度'pad': 1,  # 本文与框周围距离})# 南海诸岛文字展示plt.text(x=-2300000,y=-1209000,s='南',fontdict=dict(fontsize=3,color='#151515',family='Microsoft YaHei'))plt.text(x=-2360000,y=-1389000,s='海',fontdict=dict(fontsize=3,color='#151515',family='Microsoft YaHei'))plt.text(x=-2440000,y=-1549000,s='诸',fontdict=dict(fontsize=3,color='#151515',family='Microsoft YaHei'))plt.text(x=-2540000,y=-1689000,s='岛',fontdict=dict(fontsize=3,color='#151515',family='Microsoft YaHei'))# 在画布中添加线line = sgeom.LineString([(1815000, -1090000), (1815000, -1003000)])ax.add_geometries([line], proj, facecolor='k', edgecolor='k', linewidth=0.2)line = sgeom.LineString([(1800000, -1280000), (1760000, -1373000)])ax.add_geometries([line], proj, facecolor='k', edgecolor='k', linewidth=0.2)line = sgeom.LineString([(1600000, -1630000), (1560000, -1743000)])ax.add_geometries([line], proj, facecolor='k', edgecolor='k', linewidth=0.2)return plt, ax, projif __name__ == '__main__':shp_path = r'C:\工作\解压文件\县级数据\县级数据\县级数据.shp'file = shapefile.Reader(shp_path, encoding='gbk')srs = file.shapeRecords()dic = {'first_title': '省级风险拼图产品(中小河流洪水)','date': '2019年5月10日','second_title': '06月09日08时-06月10日08时','third_title': '中央气象台'}plt, ax, proj = map_generate(dic)f = open(r'..\data\basedata\行政边界\x_albers_map.json', encoding='utf-8')xian_albers = json.loads(f.read())f.close()cf = configparser.ConfigParser()cf.read("../config/config.cfg", 'UTF-8')file_prefix = cf.get("file_path", "WARNING_PUZZLE_save_prefix")plt.savefig(file_prefix+'/map.png')# plt.savefig("C:\工作\图片生成\map.png")plt.show()

运行结果:

由于网上找到的很多代码都缺失,涉及到中国国家边境问题一定要慎重(坚持维护国家领土主权,港澳台也是国家领土的一部分),因此选择手敲代码。其中用到的边境shapely文件上传至我个人主页,方便下载

python绘制中国地图(模仿中央气象台)相关推荐

  1. python绘制中国_使用python绘制中国地图

    前言 有的时候需要将一些相关的数据放到地图上,可以更加直观的展示,人们也更加容易的阅读理解.比如一些大企业的全国分布,全国各地的温度数据,上映电影的各地票房情况等等.为了实现将数据可视化与地图相结合, ...

  2. Python 绘制中国地图并标上国家名

    直接使用cartopy库绘制中国以及周边国家的地图时,中国国界线有问题(藏南地区没有画到中国国界线内等)也没有九段线.下面的程序可以将国家标准国界线和九段线都添加到地图上,并标出国家名称 import ...

  3. python中国地图代码 上色_如何让使用python绘制中国地图并给特定地区上色?

    在使用python Basemap绘制地图并给特定地区染色的过程中,有些地区无法上色.请问各位大神有无解决方法? 我是准备给14个地区染色,但是能成功上色的只有6个省和直辖市. 请问这是Basemap ...

  4. 【Python 实战基础】 如何绘制中国地图展示省份GDP数据

    目录 一.实战场景 二.主要知识点 文件读写 基础语法 字符串处理 文件生成 数据构建 循环遍历 三.菜鸟实战 1.创建 python 文件 2.运行结果 一.实战场景 实战场景: 如何绘制中国地图展 ...

  5. [数据分析与可视化] Python绘制数据地图2-GeoPandas地图可视化

    本文主要介绍GeoPandas结合matplotlib实现地图的基础可视化.GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口.GeoPandas扩展了Pandas ...

  6. Basemap绘制中国地图

    2022.06.02更新 CHN_adm_shp.zip 网盘下载链接: 链接:https://pan.baidu.com/s/11igf-bfDLuolI5HzEykzMw 提取码:oas6 201 ...

  7. python画树叶-手把手|如何用Python绘制JS地图?

    原标题:手把手|如何用Python绘制JS地图? 关于转载授授权 大数据文摘作品,欢迎个人转发朋友圈,自媒体.媒体.机构转载务必申请授权,后台留言"机构名称+文章标题+转载",申请 ...

  8. 使用raphael.js绘制中国地图

    最近的数据统计项目中要用到中国地图,也就是在地图上动态的显示某个时间段某个省份地区的统计数据,我们不需要flash,仅仅依靠raphael.js以及SVG图像就可以完成地图的交互操作.在本文中,我给大 ...

  9. qcustomplot绘制热力图瀑布图_使用REmap绘制中国地图

    上次我们介绍了使用ggplot2绘制中国热力地图,需要温习的同学可以点击以下链接 使用ggplot2绘制中国地图  .在使用ggplot2绘制的时候,需要进行数据处理的步骤比较多,今天我们介绍一个新的 ...

  10. Ant Design Charts绘制中国地图并动态添加标记点

    绘制中国地图并动态添加标记点,在这里使用的是antd charts绘制,需要求只显示中国地图,并且跟踪物流信息 使用组件地址: 图表 - Plot | Ant Design Charts 这里的引入方 ...

最新文章

  1. jdk javac运行不了_Intellij IDEA搭建jdk源码阅读环境
  2. C++统计难题hdu1251
  3. Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构
  4. python类对象点处折行_史上最全的Python面向对象知识点疏理(对象是类的实例)
  5. [html] webSocket怎么做兼容处理?
  6. Ant Design Form.Item的label中文字换行的替代方式
  7. Zookeeper+Kafka集群搭建
  8. struts入门的ognl
  9. Flutter获取packageName和versionCode
  10. hex2bin和bin2hex互转的小程序源代码
  11. 规约转换装置的一些概念
  12. 面试:如何评价程序员
  13. curry化 js_Curry的js实现
  14. 关于ARM公司的cortex系列
  15. php模拟登陆青果教务系统
  16. 为什么你一直学不好SEO优化?
  17. 长城服务器装双系统,苹果双系统怎么装win7系统,教你苹果windows7双系统教程
  18. WinRAR命令行用法
  19. 微软云的一些说明(整理)
  20. ADI Blackfin DSP处理器-BF533的开发详解7:SPI接口的驱动和应用(含源代码)

热门文章

  1. Java基础问题整理
  2. 【爬虫】Python爬虫实战,Python实现中国地铁数据可视化arcmap
  3. STM8S103之tim2PWM输出
  4. vue 设置div圆角,只设置上面两个圆角,下面两个还是正方形
  5. 汉仪旗黑vivo版,汉仪旗黑字体全集全新旗黑系列71款
  6. war包的打包与解压
  7. 【码学堂】教师如何在码学堂上组织教学活动?
  8. 知了课堂 python_知了传课 - 主页
  9. VS2019下载地址和安装教程(图解)
  10. access根据所属院系修改学号_2016年计算机二级《Access》冲刺试题及答案