[英]How can I solve my dimension issue with Python pcolor?
我有3個清單,我想作一個pcolor圖。
ccplot = plt.pcolor(a,b,c,vmin = np.min(c),vmax = np.max(c))
a和b的形狀為:(108,)
問題是:
當c的形狀為(216,)時出現錯誤:
“ ValueError:沒有足夠的值可解包(預期2,得到1)”
當我將c重塑為形狀為(10800,2)的2d數組時,出現錯誤:
“ TypeError:C(108,2)的尺寸與X(108)和/或Y(108)不兼容;請參閱help(pcolor)”
請幫助我處理這個pcolor圖。 我預先感謝。
問候特拉維斯
我相信您正在錯誤地看待pcolor實現。 如果您將c作為(216,)的數組,則沒有任何意義,因為它需要i和j值來解包才能在2D網格中找到其位置。 pcolor需要能夠訪問c [i,j],對於像(216,)這樣的一維數組,這是不可能的。
同樣,當您有C(108,2)時,其他數組應看起來像X(109,)Y(3,)。 請嘗試以下示例:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LogNorm
C = np.random.rand(6, 10)
X = range(11)
Y = range(7)
fig, ax0 = plt.subplots(1, 1)
c = ax0.pcolor(X, Y, C)
ax0.set_title('default: no edges')
plt.show()
因此c是一個6x10矩陣,需要x和y的拐角位置。 然后,它們的長度必須為7,長度為11,以提供c矩陣角的所有坐標。 對於角落的一些視覺效果,您可以轉到https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pcolor.html ,其中第一幅圖像向您展示X,Y和C的關系。
希望能幫助到你!
問題在於陣列的尺寸必須兼容。 可以通過將a和b“重塑”為(36,3),然后通過ax.pcolormesh()制作那些網格,從而實現該解決方案。 最后,如果c也重塑為(36,3),即轉換為2D數組,則可以繪制pcolor。 請特別注意網格,以使其根據應用程序有意義。
a = a.reshape(36,3)
b = b.reshape(36,3)
c = c.reshape(36,3)
#making the mesh
a,b = np.meshgrid(a,b)
#pcolormesh
fig, ax0 = plt.subplots(1, 1)
c = ax0.pcolor(a, b, c)
plt.show()
pcolormesh更適合較大的數據集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.