常用的地图可视化的编程工具有 MATLAB、IDL、R、GMT、NCL 等。相比于ArcGIS、QGIS和ArcGISpro用鼠标点来点去,编程绘图也是有很大的优点的,方便,可批量,美观。

大气科学和气象的朋友们一直使用的应该是 NCL,易用性不错,画地图的效果也很好。然而 2019 年初,NCAR 宣布 NCL 将停止更新,并会在日后转为 Python 的绘图包。

此前 Python 最常用的地图包是 Basemap,然而它将于 2020 年被弃用,官方推荐使用 Cartopy 包作为替代。Cartopy 是英国气象局开发的地图绘图包,实现了 Basemap 的大部分功能,还可以通过 Matplotlib 的 API 实现丰富的自定义效果。

似乎Cartopy是目前比较不错的选择,但是实在是太不稳定了,很多功能还不完备,目前的版本是0.21。

首先读取中国降雨格点数据,读成矩阵:

import pandas as pd
import numpy as np
import os
dir = 'D:/Acdemic/xibei/data_1/grid_prcp/'
txtLists = os.listdir(dir)
files = list(filter(lambda x: x[-4:] in ['.txt'], txtLists))
df = pd.DataFrame()
i = 0;
prcp = np.zeros((72, 128, len(files)))
for file in files:data = pd.read_table(dir+file, sep='\s+', header=None, index_col=False, skiprows=6)print(str(i) + ': ' + file)prcp[:, :, i] = np.array(data)i += 1
prcp1 = np.mean(prcp, 2) * 12
prcp1[prcp1 < -1000] = None

数据和读取之前介绍过了,参考:

写个函数绘制省界矢量,这个函数也可以用于各类矢量绘制

import cartopy.io.shapereader as shpreader
def add_shp(ax, **kwargs):'''在地图上画出中国省界的shapefile.Parameters----------ax : GeoAxes目标地图.**kwargs绘制shape时用到的参数.例如linewidth,edgecolor和facecolor等.'''proj = ccrs.PlateCarree()reader = shpreader.Reader('D:/OneDrive/data/china.shp')provinces = reader.geometries()ax.add_geometries(provinces, proj, **kwargs)reader.close()

绘图:

import matplotlib as mpl
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
# 导入Cartopy专门提供的经纬度的Formatter
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import matplotlib.ticker as mticker
# 导入底图包
import cartopy.feature as cfeaturefig = plt.figure()
proj = ccrs.PlateCarree()
ax = fig.add_subplot(111, projection=proj)# 设置经纬度范围,限定为中国
# 注意指定crs关键字,否则范围不一定完全准确
extents = [70, 140, 15, 55]
ax.set_extent(extents, crs=proj)
# 添加各种特征
ax.add_feature(cfeature.OCEAN)
ax.add_feature(cfeature.LAND, edgecolor='black')
#ax.add_feature(cfeature.LAKES, edgecolor='black')
#ax.add_feature(cfeature.RIVERS)
#ax.add_feature(cfeature.BORDERS)
# 添加网格线
ax.gridlines(linestyle='--')# 设置大刻度和小刻度
ax.set_xticks(np.arange(70, 140 + 20, 20), crs=proj)
ax.set_xticks(np.arange(70, 140 + 10, 10), minor=True, crs=proj)
ax.set_yticks(np.arange(15, 55 + 20, 20), crs=proj)
ax.set_yticks(np.arange(15, 55 + 10, 10), minor=True, crs=proj)# 利用Formatter格式化刻度标签
ax.xaxis.set_major_formatter(LongitudeFormatter())
ax.yaxis.set_major_formatter(LatitudeFormatter())# 添加底图
long = np.linspace(72, 136, 128); lat = np.linspace(18, 54, 72)
im = ax.contourf(long, lat[::-1], prcp1,levels=np.linspace(0, 2000, 11), cmap='RdYlBu_r',extend='both', alpha=0.8
)
cbar = fig.colorbar(im, ax=ax, shrink=0.9, pad=0.1, orientation='horizontal'
)cbar.ax.tick_params(labelsize='small')
ax.set_title('Annul precipitaion (mm)')# 添加矢量
add_shp(ax, lw=1, ec='k', fc='none')plt.show()
  • extents = [70, 140, 15, 55]是图层的经纬度范围,简单来说是框的大小

  • ax.add_feature(cfeature.OCEAN)用于添加cartopy的各类内置要素,海洋大陆等等

  • ax.set_xticks(np.arange(70, 140 + 20, 20), crs=proj)ax.set_xticks(np.arange(70, 140 + 10, 10), minor=True, crs=proj)分别是主次刻度线,70, 140是x的经度开始和截至,20是间隔

  • ax.contourf( long, lat[::-1], prcp1, levels=np.linspace(0, 2000, 11), cmap='RdYlBu_r', extend='both', alpha=0.8用于添加栅格,x和y对应经纬度,一般来说nc文件自带这个数据,prcp是栅格矩阵,levels是颜色映射的level。

这样就绘制好了,结果如下:

References:

[1] cartopy官方文档:https://scitools.org.uk/cartopy/docs/latest/reference/index.html

g-yK5m64Y1-1668745189793)]

References:

[1] cartopy官方文档:https://scitools.org.uk/cartopy/docs/latest/reference/index.html

[2] Cartopy 系列:从入门到放弃: https://zhajiman.github.io/post/cartopy_introduction/

cartopy绘制中国降雨地图相关推荐

  1. matlab绘制中国南海地图(九段线小图)

    matlab绘制中国南海地图(九段线小图) 网上关于怎么画南海九段线小图的文章不多,在此记录一下. 绘制南海图 首先要下载中国地图的shp文件,参见上一篇文章. %------------------ ...

  2. cartopy 绘制中国地图,南海诸岛和十段线

    cartopy作为Basemap的替代者,绘制地图还是非常方便的,尤其是有很多大牛现成的例子,这里参考了多篇文章,结合了绘制dat格式和shp格式的边界方法,使用了GMT中文社区的中国边界,shp文件 ...

  3. 【干货教程】如何用Python优雅地绘制中国的地图

    推荐一个超好用的python包folium, 专门用于地理数据可视化 使用方法很简单,操作如下: 导入包,创建一副世界地图 import folium import pandas as pd# def ...

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

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

  5. Python爬虫小记(2) :抓取全国各省市疫情实时数据 绘制2019-nCoV疫情地图

     2021/07/15更新:         没有及时看到评论区反馈的问题,属实抱歉,拉下代码看了一下应该是Pyecharts中Map的data_pair数据类型发生了变化,现将dic_items转化 ...

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

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

  7. 使用 Cartopy 绘制区域地图

    使用 Cartopy 绘制区域地图 绘制亚洲地区的地形图(Miller 投影),并根据中国地区的 shapefile 绘制各个省份自治区的边界. import matplotlib.pyplot as ...

  8. Python气象数据可视化学习笔记5——基于cartopy绘制contour并对中国地区进行白化(包含南海)

    基于cartopy绘制contour并对中国地区进行白化(包含南海) 1. 写在前面 利用cartopy画填色图已经掌握,这一篇主要记录了在填色的基础上叠加白化.主要参考了气象家园的两篇帖子,并进行了 ...

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

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

最新文章

  1. PHP7 JIT 相关开源项目(JPHP)
  2. 【渝粤教育】国家开放大学2018年春季 8623-22T燃气行业法律法规 参考试题
  3. via浏览器简洁主页html源码 支持搜索提示
  4. cmake相关:sudo make install后的卸载
  5. python输出文本和值_Python有没有函数打印当前对象的所有属性和值?_others_酷徒编程知识库...
  6. Android 计步器 - 手机自带系统级的 健康运动App 授权
  7. ECCI 电子通道衬度成像 简介
  8. php处理苹果支付接口回调
  9. java学习就去这56个网站论坛(附各种java学习公众号)
  10. unexpected EOF while looking for matching ``'
  11. 给寸照换底色(抠头发)
  12. 2018平安科技春季校招后台开发人员面试经历
  13. 新版代shua社区源码已更新 非常漂亮
  14. powerpovit oracle,在 SharePoint Server 2013 PowerPivot Oracle 数据源配置服务时出错
  15. 理解Linux系统中的load average(图文版)
  16. 如何写出漂亮的 数字字体
  17. 神经网络 目标跟踪_图神经网络的多目标跟踪
  18. ansible 做服务器互信
  19. Android MediaProvider数据库模式
  20. 动态规划最优二叉搜索树C语言,【算法导论】动态规划之“最优二叉搜索树”...

热门文章

  1. X射线爆炸物及毒品探测技术研究
  2. [ZUCC 英语周测]Quiz B-3-8
  3. C# Winform 从扫描仪获取图片 并导出为PDF
  4. 使用ASP.NET Core进行跨平台Web文档扫描
  5. hotmail收不到邮件_将Hotmail和实时电子邮件帐户添加到Outlook 2010
  6. ​软件测试行业不行,菜是原罪,三年自动化测试就这水平?还不如回去喂猪...
  7. 东莞横沥压铸是一种常用的金属铸造工艺
  8. 简单探讨可牛影像软件中具有肤质保留功能的磨皮算法及其实现细节
  9. python 连接 Linux 的 redis 报错 (redis.exceptions.ConnectionError: Error 10061 ...由于目标计算机积极拒绝,无法连接)
  10. uno牌的玩法图解_UNO一起优诺出牌套路及玩法规则介绍:经典场规则及小技巧