爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 20466|回复: 11

[求助] Metpy绘制斜剖面遇到的问题求助:如何对数组使用cross_section

[复制链接]

新浪微博达人勋

发表于 2021-2-25 18:24:29 | 显示全部楼层 |阅读模式

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

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

x
数据是逐月的,需要先做季节平均和年际滤波之后再做斜剖面处理。
但是官网例子读取的数据不需要做这些,直接读取然后获得变量和维度属性,后续做剖面处理:https://unidata.github.io/MetPy/ ... es-cross-section-py
data = xr.open_dataset(get_test_data('narr_example.nc', False))data = data.metpy.parse_cf().squeeze()
start = (37.0, -105.0)
end = (35.5, -65.0)
cross = cross_section(data, start, end).set_coords(('lat', 'lon'))
可是我的问题是需要先把数据处理一下,得到的是数组,然后对数组做剖面处理,以U风为例

ds = xr.open_dataset('uvw2.nc')
ds = ds.metpy.parse_cf().squeeze()

U_data = ds.variables['u'][:,:,:,:]#读取U风
U_data = U_data(选取分析区域,时间上做夏季平均,再做年际滤波)#此处省去
#设置斜剖面起始值:(纬度,经度)
aa = (50, 140)
bb = (35, 130)

#对U_data做两点间剖面
cross = cross_section(U_data, aa, bb).set_coords(('latitude', 'longitude'))
ValueError: Data missing required coordinate information. Verify that your data have been parsed by MetPy with proper x and y dimension coordinates and added crs coordinate of the correct projection for each variable.

出错:数据缺少所需的坐标信息。验证您的数据已由MetPy使用正确的x和y尺寸坐标进行分析,并为每个变量添加正确投影的crs坐标。
我想到的解决办法是要把预先赋予数组坐标信息,但数组不能使用ds.metpy.parse_cf().squeeze()来获取坐标信息啊,有遇到相同问题的园友吗?求指教,谢谢!

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

新浪微博达人勋

发表于 2021-2-25 19:49:40 | 显示全部楼层
metpy支持的好像是dataarray格式的。你滤波后估计是得把dataarray转成numpy的array格式的。丢失了经纬和高度信息。最简单的方法是你把你得到的ds这个变量复制一份,把里面的u的原始数值values换成滤波后的数值。
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2021-2-25 19:21:28 | 显示全部楼层
在attribute加入坐标信息
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-2-25 20:41:24 | 显示全部楼层
931404656 发表于 2021-2-25 19:21
在attribute加入坐标信息

请问可以提供一下代码吗?这方面我小白一枚,不知如何下手。百度也没查到
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-2-25 21:44:22 | 显示全部楼层
灰色节能君 发表于 2021-2-25 19:49
metpy支持的好像是dataarray格式的。你滤波后估计是得把dataarray转成numpy的array格式的。丢失了经纬和高 ...

有没有具体替换value的代码哇,抱歉,理解了你的意思,有些茫然
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-2-26 08:38:09 | 显示全部楼层
我是参考样例的attribute写到自己nc里面,你可以试试
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-2-26 09:23:22 | 显示全部楼层
LemonTree007 发表于 2021-2-25 21:44
有没有具体替换value的代码哇,抱歉,理解了你的意思,有些茫然

ds.variables['u'].values=newdata   这样就可以啊
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-2-26 13:49:07 | 显示全部楼层
灰色节能君 发表于 2021-2-26 09:23
ds.variables['u'].values=newdata   这样就可以啊

谢谢,但是newdata时间维逐年的,原始数据是逐月的。。。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-2-26 13:52:36 | 显示全部楼层
931404656 发表于 2021-2-26 08:38
我是参考样例的attribute写到自己nc里面,你可以试试

好的,谢谢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-2-26 14:44:50 来自手机 | 显示全部楼层
那你更改一下time维的时间戳不就行了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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