python报错TypeError: Input z must be 2D, not 3D的解决方法

作者:shayuxing 时间:2023-09-14 09:02:23 

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

python报错TypeError: Input z must be 2D, not 3D的解决方法

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

python报错TypeError: Input z must be 2D, not 3D的解决方法

但是不知道为啥,但是参考画图过程,分析这个其中的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类似矩阵是绘制轮廓的高度值
levelsint或类似数组,可选用来确定轮廓线\区域的数量和位置
aalphafloat,可选alpha混合值,介于0(透明)和1(不透明)之间。
cmapstr或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报错TypeError: Input z must be 2D, not 3D的解决方法

 初次见面,请多关照!希望能解决你的一点小烦恼哦!

来源:https://blog.csdn.net/shayuxing/article/details/122024476

标签:python,报错,TypeError
0
投稿

猜你喜欢

  • python写入文件如何取消自动换行

    2023-11-28 22:39:11
  • Python中json.load()和json.loads()有哪些区别

    2022-11-09 09:24:05
  • python 画函数曲线示例

    2022-09-05 03:29:24
  • 在RedHat系Linux上部署Python的Celery框架的教程

    2023-07-30 15:49:37
  • python实现烟花小程序

    2022-10-02 09:45:23
  • python妹子图简单爬虫实例

    2022-12-11 05:47:50
  • golang cache带索引超时缓存库实战示例

    2023-07-24 04:43:11
  • echo(),print(),print_r()之间的区别?

    2023-11-15 08:52:42
  • SQLServer 存储过程简介与使用方法

    2009-07-07 14:06:00
  • 关于Python中 循环器 itertools的介绍

    2023-11-23 02:48:21
  • python 异常捕获详解流程

    2022-06-12 15:31:04
  • 深度学习入门之Pytorch 数据增强的实现

    2021-04-05 22:26:07
  • Python实现视频中添加音频工具详解

    2022-06-03 12:32:28
  • 在Typescript中如何使用for...in详解

    2023-08-18 15:39:32
  • vue项目中data数据之间互相访问的实现

    2024-05-28 15:51:43
  • Python文件操作类操作实例详解

    2023-05-19 04:45:08
  • MSSQLSERVER不同版本设置开启远程连接(sa配置)

    2024-01-23 05:42:41
  • 详解如何将本地项目上传到Github的方法步骤(图文)

    2023-12-07 23:21:31
  • 详解如何使用Pytorch进行多卡训练

    2023-08-02 06:43:29
  • python3操作微信itchat实现发送图片

    2022-03-26 11:42:52
  • asp之家 网络编程 m.aspxhome.com