爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 27446|回复: 8

[经验总结] 基于metpy库画T-LnP图(国内主流形式,并非斜温)

[复制链接]

新浪微博达人勋

发表于 2021-3-2 11:01:05 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

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


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



下图是作者随手画的,没有做一些修饰,主要是想着大家其实需要的干货,会画了以后肯定画的都会比作者好,比作者精致
Figure_1.png
## 导入相关库
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的探空数据,可以自己导出,如果需要,可以在下面留言,作者给发测试数据。

作者CSDN论坛主页  htps://blog.csdn.net/weixin_42372313 支持一波,感谢

画探空.rar

22.29 KB, 下载次数: 60, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2021-3-2 11:18:28 | 显示全部楼层
不错~赞一个~~继续学习
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-3-5 10:59:17 | 显示全部楼层
module 'metpy' has no attribute 'wind_components',楼主metpy是哪个版本?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-3-19 07:50:45 | 显示全部楼层
楼主大牛啊,测试数据能给我发一份吗,zyyao2010@163.com.谢谢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-3-19 10:34:38 | 显示全部楼层
珮瑶瑶 发表于 2021-3-19 07:50
楼主大牛啊,测试数据能给我发一份吗,zyyao2010@163.com.谢谢

已经发过你了啊
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-3-19 11:45:59 | 显示全部楼层
jl2587t 发表于 2021-3-19 10:34
已经发过你了啊

我以为你要发原始的micaps数据呢,原来来个已经收到了,谢谢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-3-19 22:07:35 | 显示全部楼层
珮瑶瑶 发表于 2021-3-19 11:45
我以为你要发原始的micaps数据呢,原来来个已经收到了,谢谢

那个就是micaps数据
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-5-10 17:13:00 | 显示全部楼层
谢谢楼主的分享风向杆的标准跟国外不一样的问题可以用以下代码解决:
barb_increments = {'half':2, 'full':4, 'flag':20}
skew.plot_barbs(p, u, v, barb_increments = {'half':2, 'full':4, 'flag':20})
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-8-1 17:23:04 | 显示全部楼层
楼主可以把测试数据我发一份嘛,xiezhenyu0207@163.com
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表