我经常使用matplotlib的pcolor方法,但有时会给我一些我不理解的尺寸不匹配错误。在这里示例代码
import numpy as np
import matplotlib.pyplot as plt
idx1 = 180
idx2 = 220
Range1 = range(idx1, idx2, 1)
Range2 = range(512)
z = np.random.randn( len( Range1 ), 512)
x, y = np.meshgrid( Range1 , Range2)
plt.figure()
plt.pcolor(x, y, z)
plt.show()
您可以自己尝试不匹配错误是
Traceback (most recent call last):
File "<ipython-input-1-7d51fd1b710e>", line 13, in <module>
plt.pcolor(x, y, z)
File "C:UsersfedelAnaconda2clibsite-packagesmatplotlibpyplot.py", line 3083, in pcolor
ret = ax.pcolor(*args, **kwargs)
File "C:UsersfedelAnaconda2clibsite-packagesmatplotlib__init__.py", line 1818, in inner
return func(ax, *args, **kwargs)
File "C:UsersfedelAnaconda2clibsite-packagesmatplotlibaxes_axes.py", line 5168, in pcolor
X, Y, C = self._pcolorargs('pcolor', *args, allmatch=False)
File "C:UsersfedelAnaconda2clibsite-packagesmatplotlibaxes_axes.py", line 4996, in _pcolorargs
C.shape, Nx, Ny, funcname))
TypeError: Dimensions of C (40L, 512L) are incompatible with X (40) and/or Y (512); see help(pcolor)
" 40升"维度与没有L维的" 40"尺寸有什么区别?您建议我做什么以避免此错误并绘制数据?
L
不是问题。这是使用旧版本的工件(Python 2具有两种整数类型)。
看起来您的z
(C
到pcolor
方法)具有转置形状,40&Times;512而不是512和时代;40:
for a in [x, y, z]:
print(a.shape)
# (512, 40)
# (512, 40)
# (40, 512)
换台z
使其起作用:plt.pcolor(x, y, z.T)