基于metpy库画T-LnP图(国内主流形式,并非斜温)

基于metpy库画T-LnP图(国内主流形式,并非斜温)

时隔多日再次更帖,主要原因是一直在画T-LnP,想画一个好的,这一版是为接下来的下一帖给小白们打一下基础。
本帖的知识点为:
1.利用metpy库的SkewT类来画T-LnP图
2.改斜温图为国内传统的图像

下图是作者随手画的,没有做一些修饰,主要是想着大家其实需要的干货,会画了以后肯定画的都会比作者好,比作者精致
在这里插入图片描述

导入相关库

import pandas as pd#数据读取用
import metpy.calc as mpcalc#计算一些参数用,比如 抬升凝结高度
from metpy.plots import  SkewT#画埃玛图
from metpy.units import units#单位
import matplotlib.pyplot as plt#画图

读取数据

#第一步,用pandas读取探空数据,来自MICAPS的探空数据,csv格式
df = pd.read_csv('54511_2019122912.csv')
#查看一下数据里面的信息
df.info()
#读取各类数据,并进行单位转化
p = df['pressure'].values * units.hPa
T = df['temperature'].values * units.degC
Td = df['dewpoint'].values * units.degC
wind_speed = df['speed'].values * units.knots
wind_dir = df['direction'].values * units.degrees
#得到风的u,v,分量,具体是哪两个方向我没研究过,好像画风羽都是这么画的
u, v = mpcalc.wind_components(wind_speed, wind_dir)

画图

#设置绘图区
fig = plt.figure(figsize=(9, 9))
#创建skew实例,这里的rotation=0参数十分重要,代表的意思是温度线与Y轴的夹角,0代表了国内的探空图,加上角度就变成了斜温图
skew = SkewT(fig, rotation=0)

#画温度层结,露点层结,风
skew.plot(p, T, 'r')
skew.plot(p, Td, 'g')
skew.plot_barbs(p, u, v)



#设置XY轴范围
skew.ax.set_ylim(1050, 300)
skew.ax.set_xlim(-40, 40)


#设置横纵label
skew.ax.set_ylabel('Height/hPa')
skew.ax.set_xlabel('T/(℃)')



#计算LCL的高度,这里返回的位势高度,温度,可以转去mpcalc.lcl()的定义去看看,里面还有很多其他参数的计算方法,英文慢慢读就好了,或者用翻译软件翻译一下,都有说明
lcl_pressure, lcl_temperature = mpcalc.lcl(p[0], T[0], Td[0])
#根据温度和高度画个点,代表LCL
skew.plot(lcl_pressure, lcl_temperature, 'ko', markerfacecolor='black')

#画状态曲线
prof = mpcalc.parcel_profile(p, T[0], Td[0]).to('degC')
skew.plot(p, prof, 'k', linewidth=2)

#画能量
skew.shade_cin(p, T, prof)
skew.shade_cape(p, T, prof)

#画0度线
skew.ax.axvline(0, color='c', linestyle='--', linewidth=2)

#画底图上的干绝热线、湿绝热线、饱和比湿线,可以注释掉,看看哪个是那个
skew.plot_dry_adiabats()
skew.plot_moist_adiabats()
skew.plot_mixing_lines()

plt.show()

#半成品,后面我做完了会在论坛上发,先给你发个框架,自己已经可以在里面加自己想加的东西了
#风速可能有问题,需要仔细看一下,因为外国用的是节为单位,风杆一根长是10节,即5米,一根短是5节,2.5米,实心三角50节,25米,自己转化一下数据,对一下

这一帖看似复杂,实则很简单,无非就是读取数据,然后画图,画图利用了一下别人写好的库,没啥难度,就是英文看着头大而已,尤其像我这种英语不好,还不是气象学科出身的人,专业英语更头大。

提到一点,就是斜温图怎么处理的问题,在代码注释里面已经写了,仔细看一下就好了 rotation=0
另外,风速可能会有问题,需要大家自己去摸索。

数据来自于MICAPS的探空数据,可以自己导出,如果需要,可以在下面留言,作者给发测试数据。

猜你喜欢

转载自blog.csdn.net/weixin_42372313/article/details/114278645
LNP