多做事,少说话,多运动,忌久坐,早点睡,少熬夜。

文章目录

  • 前言
    • 1. 概述
    • 2. 版本
      • 2.1 2021年6月1日 Version1
  • 一、绘图数据
  • 二、制图程序
  • 三、制图结果

前言

1. 概述

  • 此系列博文记录Python的Cartopy库的学习笔记
  • 此篇博文绘制中国区域2010年5月SPEI03的空间分布
  • Cartopy库的安装可以参考Cartopy 简介与安装。

2. 版本

2.1 2021年6月1日 Version1


一、绘图数据

  • 2010年5月份的3个月尺度的SPEI
  • 中国边界
  • 中国省界
  • 九段线

二、制图程序

# -*- coding: utf-8 -*-
"""
1. 程序目的(1) 绘制2010年5月份中国SPEI03的空间分布图2. 山东青岛 2021年06月1日3. 数据4. 参考资料'https://scitools.org.uk/cartopy/docs/v0.13/matplotlib/advanced_plotting.html'"""# 0. 相关包的导入
import numpy as np
import cartopy.crs as ccrsimport matplotlib.colors as mcolors
from cartopy.io.shapereader import Readerimport matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import cartopy.feature as cfeature
from matplotlib import rcParams
from osgeo import gdal# 设置matplotlib的字体
config = {"font.family":'SimHei', "font.size": 16, "mathtext.fontset":'stix'}
rcParams.update(config)
rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
rcParams['axes.unicode_minus'] = False  # 用来正常显示负号# 1. 路径处理和基本变量定义rootdir = r'C:\Users\Desktop\ChinaSPEI03\\'
shpname = rootdir + 'china\\china_country'
shpname2 = rootdir + 'china\\china_nine_dotted_line'
chinaprovince = rootdir + 'china\\china'# 2. tif数据读取tif_file = rootdir + 'China_201005SPEI03_Mask.tif'in_ds = gdal.Open(tif_file)# proj_wkt = in_ds.GetProjection()
# print(proj_wkt)# proj = osr.SpatialReference()
# proj.ImportFromWkt(proj_wkt)
# print(proj)# 获取tif数据的基本信息,用于制图设置
geo_transform = in_ds.GetGeoTransform()
#print(geo_transform)origin_x = geo_transform[0]
origin_y = geo_transform[3]
pixel_width = geo_transform[1]
pixel_height = geo_transform[5]# 行数和列数
n_rows = in_ds.RasterYSize
n_cols = in_ds.RasterXSize#print(n_rows,n_cols)in_band = in_ds.GetRasterBand(1) #打开波段1
in_data = in_band.ReadAsArray()# 数据范围
lon_range_new = np.linspace(origin_x,(origin_x+pixel_width*n_cols-pixel_width),n_cols)
lat_range_new = np.linspace(origin_y,(origin_y + pixel_height*n_rows-pixel_height),n_rows)# 数组无效值掩膜
mask = (in_data < -999)
in_data_mask = np.ma.array(in_data,mask=mask)# 3. 绘图
fig = plt.figure(figsize=(6,4),dpi=600)  #创建figure对象# 创建画图空间, 使用兰伯特投影# 投影设置
proj = ccrs.LambertConformal(central_longitude=107.5, \central_latitude=36.0, standard_parallels=(25,47))
ax = fig.subplots(1, 1, subplot_kw = {'projection': proj})  #主图# 图名
ax.set_title('中国区域2010年5月SPEI03',fontsize = 12,loc='center')# 设置颜色显示范围
norm = mcolors.Normalize(vmin=-2.5,vmax=2.5)# 设置网格点属性,以下用于兰伯特投影
region = [80, 130, 15.5, 52.5]
ax.set_extent(region)
lb = ax.gridlines(draw_labels=None,x_inline=False, y_inline=False,\linewidth=0.1, color='gray', alpha=0.8, linestyle='--' )
lb.xlocator = mticker.FixedLocator(range(0,180,10))
lb.ylocator = mticker.FixedLocator(range(0,90,10))
lb = ax.gridlines(draw_labels=True,x_inline=False, y_inline=False, \linewidth=0.1, color='gray', alpha=0.9, linestyle='--' )
lb.top_labels = False
lb.right_labels = None
lb.xlocator = mticker.FixedLocator(range(90, 129, 10))
lb.ylocator = mticker.FixedLocator(range(20, 50, 10))
lb.ylabel_style = {'size': 10, 'color': 'k'}
lb.xlabel_style = {'size': 10, 'color': 'k' }
lb.rotate_labels = False# 画pcolormesh图
cs = ax.pcolormesh(lon_range_new, lat_range_new, in_data_mask,\cmap = 'Spectral', norm=norm,transform = ccrs.PlateCarree())   # 添加海岸线
ax.add_feature(cfeature.COASTLINE.with_scale('50m'),linewidth = 0.5)  # 绘制中国省界
ax.add_geometries(Reader(chinaprovince + '.shp').geometries(), ccrs.PlateCarree(), \facecolor = 'none', edgecolor = 'gray', linewidth = 0.8)   # 绘制中国边界
ax.add_geometries(Reader(shpname + '.shp').geometries(), ccrs.PlateCarree(), \facecolor = 'none', edgecolor = 'k', linewidth = 1)     # 绘制九段线
ax.add_geometries(Reader(shpname2 + '.shp').geometries(), ccrs.PlateCarree(), \facecolor = 'none', edgecolor = 'r', linewidth = 1)# 添加文字
fontdict = {'size':10,'color':'k','family':'Times New Roman'}
ax.text(67,47.5,'2010-05-SPEI03',
transform=ccrs.PlateCarree(),
fontdict=fontdict,
weight='normal')# 单独设置图例
l = 0.21
b = 0.06 # 距离主图的位置:上下
h = 0.02
w = 1 - 2*0.2    rect = [l,b,w,h]
cbar_ax = fig.add_axes(rect)  cb = plt.colorbar(cs, cax=cbar_ax,orientation = 'horizontal',label = 'drought intensity',extend='both')cb.ax.tick_params(labelsize=11)x1_label = cb.ax.get_xticklabels()
[x1_label_temp.set_fontname('Times New Roman') for x1_label_temp in x1_label]font = {'family' : 'Times New Roman','color'  : 'black','weight' : 'normal','size'   : 11.5,}
cb.set_label('Drought Degree' ,fontdict=font) #设置colorbar的标签字体及其大小#############添加南海,实际上就是新建一个子图覆盖在之前子图的右下角##########
# 设置兰伯特投影
proj2 = ccrs.LambertConformal(central_longitude=115, \central_latitude=12.5, standard_parallels=(3,20))# 定位南海子图的位置,四个数字需要调整
# 四个数字分别是(left, bottom, width, height):
# 子图左下角水平方向相对位置,左下角垂直方向相对位置,子图宽,子图高
ax2 = fig.add_axes([0.73, 0.11, 0.1, 0.25], projection = proj2)ax2.set_extent([105, 125, 0, 26]) # 设置网格点
lb=ax2.gridlines(draw_labels=None,x_inline=False, y_inline=False,\linewidth=0.1, color='gray', alpha=0.8, linestyle='--' )
lb.xlocator = mticker.FixedLocator(range(90, 135, 5))
lb.ylocator = mticker.FixedLocator(range(0, 90, 5))# 添加海岸线
ax2.add_feature(cfeature.COASTLINE.with_scale('50m'),linewidth = 0.5)#绘制中国省界
ax2.add_geometries(Reader(chinaprovince + '.shp').geometries(), ccrs.PlateCarree(), \facecolor = 'none', edgecolor = 'gray', linewidth = 0.8)   # 添加中国边界
china = Reader(shpname + '.dbf').geometries()
ax2.add_geometries(china, ccrs.PlateCarree(), facecolor = 'none', \edgecolor = 'black', zorder = 1)# 添加数据
cs2 = ax2.pcolormesh(lon_range_new, lat_range_new, in_data_mask,\cmap = 'Spectral', norm=norm,transform = ccrs.PlateCarree())# 九段线
ax2.add_geometries(Reader(shpname2 + '.shp').geometries(), ccrs.PlateCarree(), \facecolor = 'none', edgecolor = 'r', linewidth = 1)# 存储制图结果
plt.savefig(rootdir+'ChinaDrought.jpg',bbox_inches='tight',dpi=300)    print('Finished.')

三、制图结果

Python-Cartopy制图学习01-中国区域SPEI空间制图相关推荐

  1. Python Flask教程学习01

    教程来源于w3cschool,我跟着敲一遍,做一遍 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活.轻便.安全且容易上手.它可以很好地结合MVC模式进行开发,开 ...

  2. Python Flask教程学习02

    书接上文Python Flask教程学习01 文章目录 Flask 教程 Flask 会话 Flask 消息闪现 Flask 文件上传 Flask 扩展/寻找扩展 Flask 教程 Flask 会话 ...

  3. Python学习-01(其实是Linus基础)

    Python学习-01(其实是Linus基础) 1.操作系统(Operation System) ##1.1操作系统的作用 1. 直接操作计算机硬件(用来管理硬件设备) 2. 把操作硬件的代码封装成一 ...

  4. Python最优化算法学习笔记(Gurobi)

    微信公众号:数学建模与人工智能 github地址:https://github.com/QInzhengk/Math-Model-and-Machine-Learning Python最优化算法学习笔 ...

  5. 【python量化交易学习】从tushare获取股票交易数据,存入后再从mysql或excel读取数据,筛选股票,用pyecharts画出K线图。

    选定日期,筛选涨幅达到10%的股票,并画出K线图.观察涨停后股票走势. 由于创业板涨停板为20%,科创板20%,北交所30%.因此筛选出的涨停股票不完全准确.考虑到目前市场打板主要集中在10%的主板股 ...

  6. Python爬虫视频课程:中国女性胸部大小分析-李宁-专题视频课程

    Python爬虫视频课程:中国女性胸部大小分析-830人已学习 课程介绍         本课程使用Python3作为编程语言,通过Python爬虫技术从天猫和京东抓取了近20000条胸罩销售数据来分 ...

  7. Python【超强学习网站】

    文章目录 一.中文网站 1.Python中文学习大本营 2.Python Code Examples代码示例 3.Python学习网-Python视频教程免费在线学习 4.W3C-School编程微课 ...

  8. Python Web 深度学习实用指南:第一、二部分

    原文:Hands-On Python Deep Learning for the Web 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 深度学习 译文集],采用译后编辑 ...

  9. Python pillow库学习笔记

    Python pillow库学习笔记 PIL( Python Imaging Library)是 Python 的第三方图像处理库,由于其功能丰富,API 简洁易用,因此深受好评. 自 2011 年以 ...

  10. 亚马逊云科技在中国区域上线机器学习新服务,打造广泛而深入的人工智能与机器学习工具集

    2021年5月11日,在完全托管的机器学习服务Amazon SageMaker落地中国区域一周年之际,亚马逊云科技宣布通过与光环新网和西云数据的紧密合作在中国区域进一步落地多项人工智能与机器学习的新服 ...

最新文章

  1. php http面向对象编程实例,PHP面向对象编程——PHP对象引用实例代码
  2. Html内联定义特点,HTML5
  3. 为什么每次有人大声通电话时,我就很烦躁...
  4. 数据科学 IPython 笔记本 7.3 Pandas 数据操作
  5. Media Player Classic - HC 源代码分析 2:核心类 (CMainFrame)(1)
  6. 计算机桌面锁定了没设密码怎么解锁,电脑桌面锁屏怎么设置,电脑怎么给手机解锁...
  7. MFC树型控件 搜索并展开高亮指定树节点
  8. ANDROID 中设计模式的採用--结构型模式
  9. SLAM_ORB-SLAM3(VIO/IMU)适配KITTI数据集,并评估!!!奶妈级教程!!!
  10. 微服务下flask和celery的通信
  11. 无线通信设备安装工程概预算编制_电气设备安装工程计价与应用
  12. python手机桌面开发_将Android手机打造成你的Python开发者桌面#华为云·寻找黑马程序员#...
  13. 电商app用户行为分析(含全过程python代码)
  14. 网络安全新晋网红“零信任”
  15. stata软件不出图_stata 如何导出绘制的图?
  16. python好玩游戏的物品清单_Python 好玩游戏的物品清单
  17. python使用KNeighborsClassifier出现FutureWarning: Unlike other reduction functions (e.g. `skew`, `kurtosi
  18. Java 中的加密算法
  19. bcb dll返回字符_⑩的游戏修改小课堂4——HOOK、DLL注入与游戏乱码修正
  20. Mac 安装 node.js 并进行配置

热门文章

  1. journalctl查看服务日志
  2. css td 宽度百分比设置,css怎么设置td的宽度
  3. cadence17.2制作封装过程
  4. 黑马python24期课件和代码_黑马Python 24期全套教程
  5. Bat To Exe Converter将bat转换为exe的方法
  6. SRCNN:基于深度学习的超分辨率开山之作回顾
  7. SRCNN-pytoch代码讲解
  8. python 字符编码识别及转换
  9. 批量将多个 Word 文档合并成一个 Word 文件
  10. 蓝桥杯Python题目(二)