numpy 如何使用Python pcolor解决尺寸问题?

niwlg2el  于 2023-06-06  发布在  Python
关注(0)|答案(2)|浏览(215)

我有一个3列表,我想做一个pcolor图。
ccplot = plt.pcolor(a,b, c, vmin=np.min(c), vmax=np.max(c))
a和B的形状是:(108,)
问题是:
当c的形状是(216)时,我得到错误:

ValueError: not enough values to unpack (expected 2, got 1)

当我将c重新整形为形状为(10800,2)的2d数组时,我得到错误:

TypeError: Dimensions of C (108, 2) are incompatible with X (108) and/or Y (108); see help(pcolor)

请帮我处理这个pcolor图。我先谢谢你。
关于Travis H

wi3ka0sx

wi3ka0sx1#

我相信你正在以错误的方式看待pcolor实现。如果你把c作为一个(216)的数组,它就没有意义了,因为它需要i和j的值来解包,以找到它在2D网格中的位置。pcolor需要能够访问c[ i,j ],并且对于像(216,j)这样的1D阵列,这是不可能的。
同样,当你有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是一个6x 10的矩阵,它需要x和y的角的位置。然后,它们的长度需要为7和11,以提供c矩阵的角的所有坐标。对于角上的一些视觉效果,您可以转到https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pcolor.html,其中第一个图像显示X,Y和C是如何相关的。
希望能帮上忙!

p1tboqfb

p1tboqfb2#

问题是数组的维数必须兼容。该解决方案可以通过将a和b“重塑”为(36,3)来实现,然后通过ax.pcolormesh()制作它们的网格。最后,如果c也被重塑为(36,3),则可以绘制pcolor,即转换为2D数组。要特别注意网格,以便根据应用程序使其有意义。

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更适合于较大的数据集。

相关问题