2013-08-28 3 views
2

Я пытаюсь создать простой imshow() участок (Matplotlib v.1.2.1) из 2D гауссовой функции:Matplotlib imshow() слишком много объектов для CMAP

import matplotlib.pyplot as plt 
import numpy as np 
from pylab import * 

def gaussian(x,y,stdx,stdy): 
    return 1.0/(2*np.pi*stdx*stdy) * (np.exp(-0.5*(x**2/stdx**2 + y**2/stdy**2))) 

coords = np.linspace(-1,1,100) 
X,Y = np.meshgrid(coords,coords) 
std_list = np.linspace(1,2,20) 
output = [gaussian(X,Y,std_list[i],std_list[i]) for i in range(len(std_list))] 

for i in range(len(output)): 
    plt.imshow(X,Y,np.array(output[i]),cmap='bone') 
    plt.show() 

И я получаю следующие ошибка:

Traceback (most recent call last): 
    File "blur.py", line 14, in <module> 
    plt.imshow(X,Y,np.array(output[i]),cmap='bone') 
TypeError: imshow() got multiple values for keyword argument 'cmap' 

в самом деле, чтобы убедиться, что я не сошел с ума, я вынул CMAP аргумент в целом, и теперь я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "blur.py", line 14, in <module> 
    plt.imshow(X,Y,np.array(output[i])) 
    File "/home/username/anaconda/lib/python2.7/site-packages/matplotlib/pyplot.py", line  2737, in imshow 
    imlim=imlim, resample=resample, url=url, **kwargs) 
    File "/home/username/anaconda/lib/python2.7/site-packages/matplotlib/axes.py", line 7098, in imshow 
    if norm is not None: assert(isinstance(norm, mcolors.Normalize)) 
AssertionError 

Я убедился, что аргументы imshow() имеют одинаковую форму, поэтому я не совсем уверен, что я делаю неправильно. Может ли это быть ошибкой?

ответ

6

imshow не принимается x, y, z как ввод. (pcolor и pcolormesh делаем, однако).

Используйте либо pcolormesh(x, y, z), либо используйте extent kwarg для imshow.

например.

plt.imshow(Z, extent=[X.min(), X.max(), Y.min(), Y.max()], 
      cmap='bone') 

или

plt.pcolormesh(X, Y, Z, cmap='bone') 

Что происходит, что imshow ожидает

imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, 
     alpha=None, vmin=None, vmax=None, origin=None, extent=None, 
     **kwargs) 

Обратите внимание, что второй аргумент cmap, что объясняет, почему вы получаете ошибку вы когда вы передаете дополнительный cmap kwarg.

Надеюсь, это прояснит ситуацию прикосновением! Удачи!

+0

Спасибо за быстрый ответ! Я всегда забываю, какие функции используют степень, а какие могут принимать в np.ndarrays в качестве входных данных. – astromax

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