# -*- 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'] #显示中文
python lon-level剖面图
最新推荐文章于 2024-07-08 02:55:36 发布