python报错TypeError: Input z must be 2D, not 3D的解决方法
作者:shayuxing 发布时间:2023-09-14 09:02:23
目前,在使用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')
霍!这不就画出来了嘛!
初次见面,请多关照!希望能解决你的一点小烦恼哦!
来源:https://blog.csdn.net/shayuxing/article/details/122024476


猜你喜欢
- 本文实例讲述了通过php修改xml文档内容的方法,分享给大家供大家参考。具体实现方法如下:<?php//1、创建一个DOMDocume
- 本文实例为大家分享了python实现图片横向和纵向拼接的具体代码,供大家参考,具体内容如下直接上代码:# -*- coding:utf-8
- 集合(set)是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而
- 1.元字符: . 它匹配除了换行字符外的任何字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配换行 ^ 匹配行首。除非
- 在浏览天极RSS订阅页面时,可以看到天极网为方便用户定制站点内容而设立的各个RSS频道。浏览者通过订阅不同的RSS(可同时订阅多个网站),就
- 由于网络带宽以及某些WAP服务器DECK传输的限制,所以DECK越小越好,最好不要超过1.2K。如果你的需求很复杂,最好分成几个DECK来完
- 这篇文章是为了对网络模型的权重输出,可以用来转换成其他框架的模型。import tensorflow as tffrom tensorflo
- 今天来说下一台Linux主机如何启动4个MySQL数据库:1.要确定你的机器上面已经安装MySQL,我的MySQL在/usr/loacl/
- 我就废话不多说了,直接上代码吧!#coding=utf-8'''openCV中最核心的的类是Mat,他是matrix
- 概述web项目,经常需要热启动各种各样的配置信息,一旦这些服务发生变更,我们需要重新启动web server,以使配置生效,实现配置热加载。
- 利用ACCESS可以用查询创建视图这一功能来进行查询分析。选择查询->在设计视图中创建查询,然后关闭弹出的表选择对话框,在下面的窗口上
- 我是一个初入互联网的视觉设计师,和以往做设计感受最大的不同就是:一个设计的最终定稿会受到多方面的挑战,有来自产品经理的,来自开发的,来自测试
- 本文实例讲述了python求pi的方法,是一篇翻译自国外网站的文章,分享给大家供大家参考。具体实现方法如下:#_*_ coding=utf-
- SQL Server创建临时表:创建临时表 方法一: &n
- 本篇文章面向的读者: 已经基本掌握Go中的 协程(goroutine),通道(channel),互斥锁(sync.Mutex),读
- NopCommerce为了实现松耦合的框架设计目的,使用了IOC框架:Autofac。据有人测试,Autofac是性能很好的IOC工具。1、
- 为了更好的理解这些基本操作,下面会通过读取一个股票数据,来进行Pandas基本数据操作的语法介绍。# 读取文件(读取保存文件后面会专门进行讲
- 目录简介开发工具实现代码爬取效果Github地址:简介使用Python Tkinter开发一个爬取B站直播弹幕的工具,启动后在弹窗中输入房间
- WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一。
- 首先,定义一个变量:(以下以本人写的为例)首先定义一个变量:然后,给变量赋值:如果想要修改数据,主要代码如下:然后界面上要记得绑定数据id: