Python绘制风场图报错的问题怎么解决

Admin 2022-05-21 群英技术资讯 552 次浏览

这篇文章给大家介绍了“Python绘制风场图报错的问题怎么解决”的相关知识,讲解详细,步骤过程清晰,有一定的借鉴学习价值,因此分享给大家做个参考,感兴趣的朋友接下来一起跟随小编看看吧。




目前,在使用python处理一个nc文件绘制一个风场图时,出现了以下报错

虽然图片画出来了,但是很丑而且没有理想的填充颜色!

但是不知道为啥,但是参考画图过程,分析这个其中的Z应该指的绘制等高线中的这个函数:matplotlib.pyplot contourf  中使用到的Z!

而这个函数的用法为

coutour([X, Y,] Z,[levels], **kwargs)

在这里提出,matplotlib.pyplot contourf 是用来绘制三维等高线图的,不同点是contour()是绘制轮廓线。而contourf()则会填充轮廓。除非有其他说明,否则两个版本的函数是相同的。

参数
X,Y 数组,可选

是在Z中的坐标值。

当X,Y,Z都是二维数组时,它们的形状必须相同,若是一维数组,则X的长度为Z的列数,Y的长度为Z的行数,一般来说创建numpy.meshgrid()

Z 类似矩阵 是绘制轮廓的高度值
levels int或类似数组,可选 用来确定轮廓线\区域的数量和位置
aalpha float,可选 alpha混合值,介于0(透明)和1(不透明)之间。
cmap str或colormap,可选 Colormap用于将数据值(浮点数)从间隔转换为相应Colormap表示的RGBA颜色。用于将数据缩放到间隔中看 。

很显然,在这个函数用法中,如果要画出等高线,核心函数就是plt.contourf(),但在这个函数中输入的参数是x,y对应的网格数据以及此网格对应的高度值,因此我们调用np.meshgrid(x,y)把x,y值转换成网格数据:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
  
# 计算x,y坐标对应的高度值
def f(x, y):
 return (1-x/2+x**3+y**5) * np.exp(-x**2-y**2)
 
# 生成x,y的数据
n = 256
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)
 
# 把x,y数据生成mesh网格状的数据,因为等高线的显示是在网格的基础上添加上高度值
X, Y = np.meshgrid(x, y)
 
# 填充等高线
plt.contourf(X, Y, f(X, Y))
# 显示图表
plt.show()

于是我分析了我的代码中的contourf中对应的X,Y和Z,才发现果然问题出现在这里:

 cp=ax.contourf(lon,lat,ws[i,::],zorder=0,transform=ccrs.PlateCarree(),cmap=cmap,levels=levels,extend='both')

这段代码在完成三维数组的绘制时完全没有问题,但是不巧的是,我这次绘制的是四维数组,而其中的ws[i,::]则未取定其中的两维,使得该Z=ws[i,::],理论上来说属于一个三维的数组,所以才会报错。

而我们只需要把这个四维数组取定其中的两维,使得该Z属于一个二维数组即可,已知我的数据中第二维为我恰好需要将之取定为500hpa,所以将这句代码改为:

cp=ax.contourf(lon,lat,ws[i,0,::],zorder=0,transform=ccrs.PlateCarree(),cmap=cmap,levels=levels,extend='both')

 霍!这不就画出来了嘛!


到此这篇关于“Python绘制风场图报错的问题怎么解决”的文章就介绍到这了,更多相关Python绘制风场图报错的问题怎么解决内容,欢迎关注群英网络技术资讯频道,小编将为大家输出更多高质量的实用文章! 群英智防CDN,智能加速解决方案
标签: python报错

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服