2017-02-20 8 views
0

Я часто использую pcolor-метод matplotlib, но иногда он дает мне что-то вроде ошибки несоответствия измерения, которую я не понимаю. Вот пример кодаmatplotlib.pyplot.pcolor сообщение ошибки несоответствия: отсутствует L

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:\Users\fedel\Anaconda2c\lib\site-packages\matplotlib\pyplot.py", line 3083, in pcolor 
    ret = ax.pcolor(*args, **kwargs) 

    File "C:\Users\fedel\Anaconda2c\lib\site-packages\matplotlib\__init__.py", line 1818, in inner 
    return func(ax, *args, **kwargs) 

    File "C:\Users\fedel\Anaconda2c\lib\site-packages\matplotlib\axes\_axes.py", line 5168, in pcolor 
    X, Y, C = self._pcolorargs('pcolor', *args, allmatch=False) 

    File "C:\Users\fedel\Anaconda2c\lib\site-packages\matplotlib\axes\_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) 

В чем разница между измерением «40L» и «40» без L размерности? И что вы предлагаете мне сделать, чтобы избежать этой ошибки и построить данные?

ответ

1

L не является проблемой. Это артефакт использования старой версии Python (Python 2 имеет два целочисленных типа).

Похоже, ваш z (C методу pcolor) имеет транспонированной форму, 40 × 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)

 Смежные вопросы

  • Нет связанных вопросов^_^