爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 444|回复: 6

[源代码] 绘制综合廓线图

[复制链接]

新浪微博达人勋

发表于 2024-6-5 09:47:04 | 显示全部楼层 |阅读模式

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

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

x
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.pyplot import MultipleLocator #导入此类,设置坐标轴间隔
import pandas as pd
from scipy.ndimage import gaussian_filter1d

mpl.rcParams["font.size"] = 13
#读取并挑选数据
data_path = "D:/pythonProjec/19.nc"
start_time='2024-05-19T08:00:00'
end_time='2024-05-19T12:00:00'
ds = xr.open_dataset(data_path).sel(time=slice(start_time,end_time))
rh, temp, u, v, w = ds['r'], ds['t']-273.15, ds['u'], ds['v'], ds['w']   # (time,level, lat, lon)

# 挑选站点,转换time, level坐标顺序,并调整level1000hPa->100hPa),time排序
lat, lon = 32.5, 108.3
level = [200, 250, 300, 350, 400, 450, 500, 550,600,650,700,750, 800, 850, 900]
rh_bj = rh.sel(latitude=lat, longitude=lon, level=level, method='nearest').transpose("level", "time")[::-1, ::1].values
temp_bj = temp.sel(latitude=lat, longitude=lon, level=level, method='nearest').transpose("level", "time")[::-1,
          ::1].values
u_bj = u.sel(latitude=lat, longitude=lon, level=level, method='nearest').transpose("level", "time")[::-1, ::1].values
v_bj = v.sel(latitude=lat, longitude=lon, level=level, method='nearest').transpose("level", "time")[::-1, ::1].values
w_bj = w.sel(latitude=lat, longitude=lon, level=level, method='nearest').transpose("level", "time")[::-1, ::1].values
time = rh['time'][::1]
#世界时转为需要时区
time_str = pd.to_datetime(time, utc=True).tz_convert('Asia/Shanghai').strftime(
   '%d%H').tolist()  # datetime64转为string,和utc+8

# 平滑等高线数据
rh_bj = gaussian_filter1d(rh_bj, sigma=0.5)  # sigma数值越大 越平滑
w_bj = gaussian_filter1d(w_bj, sigma=0.5)
temp_bj = gaussian_filter1d(temp_bj, sigma=0.5)

# 建立画布
fig = plt.figure(figsize=(12, 6))
ax = fig.add_subplot(1, 1, 1)
# 添加RH填色图
rh_plot = ax.contourf(rh_bj, cmap='Greens', levels=[60, 70, 80, 90, 95], extend='both', alpha=0.7)
fig.colorbar(rh_plot, ax=ax, shrink=0.6, pad=0.02, extendfrac='auto')  # 添加label bar
# 添加temp, w等高线
temp_plot = ax.contour(temp_bj, colors='r')  # Negative contours default to dashed.
w_plot = ax.contour(w_bj, colors='k', alpha=0.7)
ax.clabel(temp_plot, inline=True, fontsize=10)  # 添加等高线label
ax.clabel(w_plot, inline=True, fontsize=10)

# 画风向标
barb_increments = dict(half=2, full=4, flag=20)
ax.barbs(u_bj, v_bj, color='b', length=7, alpha=0.8, barb_increments=barb_increments)
# 添加横纵坐标对应的时间和高度
# y
y_pos = [0, 1, 4, 6, 8, 14]
y_labels = [900, 850, 700, 600, 500, 200]
ax.set_yticks(y_pos, labels=y_labels)  # 显示特定xticklabels
ax.set_ylim(-0.5, len(level) + 0.1)  # 上下留出一点空白
# x
x_pos = np.arange(len(time_str))
ax.set_xticks(x_pos, labels=time_str)
ax.xaxis.set_major_locator(MultipleLocator(4))  # 设置x轴主刻度显示间隔
ax.xaxis.set_minor_locator(MultipleLocator(2))  # 设置x轴次刻度显示间隔

ax.set_ylabel("hPa")
plt.savefig("D:/pythonProjec/综合廓线图.jpg")
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2024-6-5 10:41:48 | 显示全部楼层
牛人啊,感谢大牛分享。
大牛多说几句啊,或者给个样例啊。帮助我等菜鸟学习啊。
主要是数据。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2024-6-5 11:12:44 | 显示全部楼层
独孤酒见 发表于 2024-6-5 10:41
牛人啊,感谢大牛分享。
大牛多说几句啊,或者给个样例啊。帮助我等菜鸟学习啊。
主要是数据。

不好意思,我不知道如何把数据传上去,我的数据是从ERA5官网下载的,你可以看一下ERA5数据下载教程
http://bbs.06climate.com/forum.p ... &fromuid=129494
(出处: 气象家园)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-6-7 12:14:29 | 显示全部楼层
楼主,能贴一下出的图吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2024-6-12 16:41:51 | 显示全部楼层
生成图片如下
图片1.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2024-6-12 16:47:33 | 显示全部楼层
zq200866 发表于 2024-6-7 12:14
楼主,能贴一下出的图吗?

如图     
图片1.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-6-14 16:30:11 | 显示全部楼层
请问为什么垂直速度大于0的画不出来呢,图中实线值都是0的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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