python報(bào)錯(cuò)TypeError: Input z must be 2D, not 3D的解決方法
目前,在使用python處理一個(gè)nc文件繪制一個(gè)風(fēng)場(chǎng)圖時(shí),出現(xiàn)了以下報(bào)錯(cuò)
![]()
雖然圖片畫出來(lái)了,但是很丑而且沒(méi)有理想的填充顏色!

但是不知道為啥,但是參考畫圖過(guò)程,分析這個(gè)其中的Z應(yīng)該指的繪制等高線中的這個(gè)函數(shù):matplotlib.pyplot contourf? 中使用到的Z!
而這個(gè)函數(shù)的用法為
coutour([X, Y,] Z,[levels], **kwargs)
在這里提出,matplotlib.pyplot contourf?是用來(lái)繪制三維等高線圖的,不同點(diǎn)是contour()是繪制輪廓線。而contourf()則會(huì)填充輪廓。除非有其他說(shuō)明,否則兩個(gè)版本的函數(shù)是相同的。
| 參數(shù) | ||
| X,Y | 數(shù)組,可選 |
是在Z中的坐標(biāo)值。 當(dāng)X,Y,Z都是二維數(shù)組時(shí),它們的形狀必須相同,若是一維數(shù)組,則X的長(zhǎng)度為Z的列數(shù),Y的長(zhǎng)度為Z的行數(shù),一般來(lái)說(shuō)創(chuàng)建numpy.meshgrid() |
| Z | 類似矩陣 | 是繪制輪廓的高度值 |
| levels | int或類似數(shù)組,可選 | 用來(lái)確定輪廓線\區(qū)域的數(shù)量和位置 |
| aalpha | float,可選 | alpha混合值,介于0(透明)和1(不透明)之間。 |
| cmap | str或colormap,可選 | Colormap用于將數(shù)據(jù)值(浮點(diǎn)數(shù))從間隔轉(zhuǎn)換為相應(yīng)Colormap表示的RGBA顏色。用于將數(shù)據(jù)縮放到間隔中看?。 |
很顯然,在這個(gè)函數(shù)用法中,如果要畫出等高線,核心函數(shù)就是plt.contourf(),但在這個(gè)函數(shù)中輸入的參數(shù)是x,y對(duì)應(yīng)的網(wǎng)格數(shù)據(jù)以及此網(wǎng)格對(duì)應(yīng)的高度值,因此我們調(diào)用np.meshgrid(x,y)把x,y值轉(zhuǎn)換成網(wǎng)格數(shù)據(jù):
import numpy as np import pandas as pd import matplotlib.pyplot as plt # 計(jì)算x,y坐標(biāo)對(duì)應(yīng)的高度值 def f(x, y): return (1-x/2+x**3+y**5) * np.exp(-x**2-y**2) # 生成x,y的數(shù)據(jù) n = 256 x = np.linspace(-3, 3, n) y = np.linspace(-3, 3, n) # 把x,y數(shù)據(jù)生成mesh網(wǎng)格狀的數(shù)據(jù),因?yàn)榈雀呔€的顯示是在網(wǎng)格的基礎(chǔ)上添加上高度值 X, Y = np.meshgrid(x, y) # 填充等高線 plt.contourf(X, Y, f(X, Y)) # 顯示圖表 plt.show()
于是我分析了我的代碼中的contourf中對(duì)應(yīng)的X,Y和Z,才發(fā)現(xiàn)果然問(wèn)題出現(xiàn)在這里:
cp=ax.contourf(lon,lat,ws[i,::],zorder=0,transform=ccrs.PlateCarree(),cmap=cmap,levels=levels,extend='both')
這段代碼在完成三維數(shù)組的繪制時(shí)完全沒(méi)有問(wèn)題,但是不巧的是,我這次繪制的是四維數(shù)組,而其中的ws[i,::]則未取定其中的兩維,使得該Z=ws[i,::],理論上來(lái)說(shuō)屬于一個(gè)三維的數(shù)組,所以才會(huì)報(bào)錯(cuò)。
而我們只需要把這個(gè)四維數(shù)組取定其中的兩維,使得該Z屬于一個(gè)二維數(shù)組即可,已知我的數(shù)據(jù)中第二維為我恰好需要將之取定為500hpa,所以將這句代碼改為:
cp=ax.contourf(lon,lat,ws[i,0,::],zorder=0,transform=ccrs.PlateCarree(),cmap=cmap,levels=levels,extend='both')
?霍!這不就畫出來(lái)了嘛!

?初次見面,請(qǐng)多關(guān)照!希望能解決你的一點(diǎn)小煩惱哦!
到此這篇關(guān)于python報(bào)錯(cuò)TypeError: Input z must be 2D, not 3D的解決方法的文章就介紹到這了,更多相關(guān)python報(bào)錯(cuò)解決方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中報(bào)錯(cuò) “TypeError: ‘list‘ object is not callable”問(wèn)題及解決
- Python中TypeError:unhashable?type:'dict'錯(cuò)誤的解決辦法
- Python?TypeError:?‘float‘?object?is?not?subscriptable錯(cuò)誤解決
- Python開發(fā)時(shí)報(bào)TypeError:?‘int‘?object?is?not?iterable錯(cuò)誤的解決方式
- 解決python錯(cuò)誤提示:TypeError: expected string or bytes-lik問(wèn)題
相關(guān)文章
Python PyAutoGUI模塊控制鼠標(biāo)和鍵盤實(shí)現(xiàn)自動(dòng)化任務(wù)詳解
這篇文章主要介紹了Python PyAutoGUI模塊控制鼠標(biāo)和鍵盤實(shí)現(xiàn)自動(dòng)化任務(wù),結(jié)合實(shí)例形式詳細(xì)分析了pyautogui模塊的安裝、導(dǎo)入以及針對(duì)鼠標(biāo)與鍵盤的各種常見響應(yīng)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-09-09
python實(shí)現(xiàn)在函數(shù)中修改變量值的方法
今天小編就為大家分享一篇python實(shí)現(xiàn)在函數(shù)中修改變量值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
詳解Python中的偏函數(shù)(Partial Functions)
Python中的偏函數(shù)是來(lái)自函數(shù)式編程的一個(gè)強(qiáng)大工具,它的主要目標(biāo)是減少函數(shù)調(diào)用的復(fù)雜性這個(gè)概念可能起初看起來(lái)有點(diǎn)困難理解,但一旦你明白了它的工作方式,它可能會(huì)成為你的編程工具箱中的重要組成部分,文中有相關(guān)的代碼介紹,需要的朋友可以參考下2023-06-06
Python實(shí)現(xiàn)基于TCP UDP協(xié)議的IPv4 IPv6模式客戶端和服務(wù)端功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)基于TCP UDP協(xié)議的IPv4 IPv6模式客戶端和服務(wù)端功能,結(jié)合實(shí)例形式分析了Python基于TCP UDP協(xié)議的IPv4 IPv6模式客戶端和服務(wù)端數(shù)據(jù)發(fā)送與接收相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
利用matplotlib+numpy繪制多種繪圖的方法實(shí)例
matplotlib是Python最著名的繪圖庫(kù),本文給大家分享了利用matplotlib+numpy繪制多種繪圖的方法實(shí)例,其中包括填充圖、散點(diǎn)圖(scatter plots)、. 條形圖(bar plots)、等高線圖(contour plots)、 點(diǎn)陣圖和3D圖,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-05-05

