python lon-level剖面图

# -*- coding: utf-8 -*-
"""
Created on Wed Dec 20 18:20:57 2023

@author: pc
"""

import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

#####################经纬度
xr_uwnd=xr.open_dataset(r'G:\reanalysis\NCEP\data\uwnd.mon.mean.nc')#Dimensions:  (level: 17, lat: 73, lon: 144, time: 876),1948-01-01 1948-02-01 ... 2020-12-01
xr_vwnd=xr.open_dataset(r'G:\reanalysis\NCEP\data\vwnd.mon.mean.nc')#Dimensions:  (level: 17, lat: 73, lon: 144, time: 876),1948-01-01 1948-02-01 ... 2020-12-01

uu=xr_uwnd['uwnd'].loc[:,1000:60,30:0,0:359].mean(['lat','time'])
vv=xr_vwnd['vwnd'].loc[:,1000:60,30:0,0:359].mean(['lat','time'])

lon=uu['lon']
level=uu['level']

#####################画图部分
fig = plt.figure(figsize=(24,6),dpi=300)

#########################################回归
ax1 = fig.add_subplot(121)
# plt.subplots_adjust(wspace=0.3, hspace=0.1)
  
ax1.set_yscale('symlog')
ax1.set_xlim(0,359)

ax1.set_yticks([1000, 850, 500, 300,200,100])
ax1.set_yticklabels(['1000','850','500','300','200','100'])

#################纵坐标翻转,翻转后从大到小
ax1.invert_yaxis() 

########################################填充图
fig1=ax1.contourf(lon,level,uu,levels=np.arange(-8,8,1), 
              extend = 'both',zorder=0, cmap=plt.cm.bwr)

########################################垂直共用colorbar
position = fig.add_axes([0.18, 0.01, 0.21, 0.02 ])#位置[左,下,右,上]
cb1 = plt.colorbar(fig1, cax=position,orientation='horizontal')
cb1.ax.tick_params(length=1, labelsize=12,color='lightgray')#length为刻度线的长度

#########################################画等值线
# fig1=ax1.contour(lon,lat,psl,18,linewidths=1,colors='k',transform=ccrs.PlateCarree())#18为等值线的间隔距,值越大越密集
#plt.clabel(fig4,inline=6,fontsize=10,colors='k',fmt ='%1.0f')# #等值线标签小数位数

###画风场
n=5
Q1=ax1.quiver(lon[::n],level,uu[:,::n],vv[:,::n],
              color='gray',pivot='mid',width=0.0042,
              scale=120,headwidth=4,headlength=6,
              headaxislength=4)

# ax1.quiverkey(Q1,  X=0.94, Y=0.07, U=0.5,angle = 0,  
#               label='0.5m/s', labelpos='N', edgecolor='white', facecolor='g',
#               labelcolor = 'k', fontproperties = font2,linewidth=0.1)

######################箭头边框
# import matplotlib.patheffects as path_effects

# Q1.set_path_effects([path_effects.PathPatchEffect
#                       (edgecolor='white', facecolor='g', 
#                         linewidth= 1.4 )])

#刻度线设置
xmajorLocator = MultipleLocator(30)#先定义xmajorLocator,再进行调用
ax1.xaxis.set_major_locator(xmajorLocator)#x轴最大刻度
xminorLocator = MultipleLocator(30)
ax1.xaxis.set_minor_locator(xminorLocator)#x轴最小刻度

##########################################标注文字
font2 = {'family' : 'Times New Roman','weight' : 'bold','size' : 16}#设置横纵坐标的名称以及对应字体格式family'

##########################################横纵坐标标签
ax1.set_xlabel('Longitude ', font2 )
ax1.set_ylabel('Level(hPa) ', font2 )

##########################################最大刻度、最小刻度的刻度线长短,粗细设置
ax1.tick_params(which='major', length=3,width=0.4,color='k')#最大刻度长度,宽度设置,
ax1.tick_params(which='minor', length=0,width=0.3,color='k')#最小刻度长度,宽度设置
ax1.tick_params(which='both',bottom=True,top=False,left=True,labelbottom=True,
labeltop=False)
plt.rcParams['xtick.direction'] = 'out' #将x轴的刻度线方向设置向内或者外

##########################################设置坐标刻度值的大小以及刻度值的字体
plt.tick_params(labelsize=14)
labels = ax1.get_xticklabels() + ax1.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]

plt.rcParams.update({'font.size':12})#图例大小
plt.legend(loc='lower right',ncol=1)   #指定图例字体
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值