【Python气象绘图临摹】图像绘制(下):地理子图GeoAxes、xy轴设置、应用ncl色阶colormap、各标题、海岸线、添加文本、添加矩形框


绘制结果图:
1

前言

2022.9学习绘图
利用python进行气象绘图,本文为学习绘制期间记录笔记,分为上、下两部分:处理数据和图像绘制。图像绘制:区分plt.fig.ax.三者关系,设置地理子图GeoAxes地图投影、调节xy轴的具体设置、调节子图间距、添加文本、添加矩形框、应用ncl中的色阶colormap。

绘制用到(上)输出的var_all_sum_win.nc


函数中的具体参数可以去官网检索、或者百度。

plt.fig.ax.三者绘制区别:

在初学的时候,网上检索的绘图代码调用的方法大不一样,有时候用plt直接出图、有时候调用fig画布、有时候又用ax的方法,最后可能也实现了同一个绘图目的,让人摸不着头脑。
在此简单的区别一下三者关系:
·plt是matplotlib集成的绘图方法,简洁,可以直接一句话出图,适合不要求绘图质量只是看看大致分布的方法。所以精细的绘图指令不适用,在本文中一句都没有。
·fig指的是画布,直观理解是用查看器打开图片,背景那个白色的底板,每个子图都是绘制在fig上的。所以fig.的绘图指令适用于多个子图共用的元素设置,或者只有一个子图的情况。
·ax指axes,约定俗成把axes编程名字赋成ax。axes勉强翻译成绘图区域,每个子图都是一个axes区域,每个子图针对性的绘图设置必须用ax.进行精细设置。

GeoAxes地图投影:绘图投影和数据投影

创建气象上用的地理子图GeoAxes的基本方法就是,在创建Axes时指定projection参数!
要区分‘绘图投影‘和’数据投影‘:
·绘图的投影用于创建ax时,对应最后绘制出的地图投影。plt.subplots
·数据在处理时的投影,绘制的时候要进行转化,应用于set_extent() set_xticks() contourf()等。

设置绘图经纬度范围ax[i].set_extent(Region, crs=proj_data)时,一定要进行坐标系转换!!!!!

x轴、y轴设置:

x轴范围设置:
ax.set_xticks(np.arange(leftlon, rightlon+90., 90.), crs=proj)
给地图经纬度加上°E、°W等:
ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label=False))
x轴刻度线粗细、长短调节、字体大小:
tick_params(axis=‘x’, length=7, width=1.2, labelcolor=‘w’, labelsize=12)
x轴线和标签之间距离调节:
pad=5
ax.tick_params(axis=‘both’, length=7, pad=5, labelcolor=‘k’, width=1.2, labelsize=12)

多个子图之间的间距调节:

fig.subplots_adjust(hspace=-0.01) #纵向

图上添加文本、矩形框:

ax.text(10-180.,35,’a’,fontsize=13,fontweight=‘bold’,verticalalignment=‘center’,horizontalalignment=‘center’, bbox=dict(facecolor=‘w’, boxstyle=‘Square’, pad=textLTpad[i])) #pad默认0.3

boxa = patches.Rectangle((110,10),20,10 , linewidth=2, linestyle=‘-’, zorder=1, edgecolor=‘white’, facecolor=‘none’, transform=proj_data)
ax.add_patch(boxa)

python中ncl色阶colormap映射:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=43521&extra=&page=1
下载cmaps安装即可


代码


import time
time_start = time.process_time()
import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import cmaps
####################################################### 
##                读取方差数据
####################################################### 
f = xr.open_dataset('./var_all_sum_win.nc')
lon = f.lon
lat = f.lat
var_all = f['var_all']
var_sum = f['var_sum']
var_win = f['var_win']

####################################################### 
##                     PLOT
####################################################### 
proj      = ccrs.PlateCarree(central_longitude=180)
proj_data = ccrs.PlateCarree()                   # 数据的投影方式
leftlon, rightlon, lowerlat, upperlat = (-
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值