我有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图。 我先谢谢了。
致谢 特拉维斯h
答案 0 :(得分:1)
我相信您正在错误地看待pcolor实现。如果您将c设为(216,)的数组,则这没有意义,因为它需要同时提取i和j值以在 2D网格中找到其位置。 pcolor需要能够访问c [i,j],对于像(216,)这样的一维数组,这是不可能的。
另外,当您拥有C(108,2)时,其他数组应该看起来像X(109,)Y(3,)。请尝试以下示例:
startup
所以c是一个6x10的矩阵,需要x和y的拐角位置。然后,它们的长度必须为7,长度为11,以提供c矩阵角的所有坐标。要获取转角处的某些视觉效果,您可以转到https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pcolor.html,第一张图片向您展示X,Y和C的关系。
希望有帮助!
答案 1 :(得分:0)
问题在于数组的尺寸必须兼容。 可以通过将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更适合于较大的数据集。