2010-03-29 3 views
4

Я хотел бы отобразить цветную панель, представляющую необработанные значения изображения вдоль стороны matplotlib imshow subplot, которая отображает это изображение, нормализованное.Как установить цветовой эквивалент matplotlib?

Я смог нарисовать изображение и цветную панель успешно, как это, но значения colorbar min и max представляют собой нормированное (0,1) изображение вместо необработанного изображения (0,99).

f = plt.figure() 
# create toy image 
im = np.ones((100,100)) 
for x in range(100): 
    im[x] = x 
# create imshow subplot 
ax = f.add_subplot(111) 
result = ax.imshow(im/im.max()) 

# Create the colorbar 
axc, kw = matplotlib.colorbar.make_axes(ax) 
cb = matplotlib.colorbar.Colorbar(axc, result) 

# Set the colorbar 
result.colorbar = cb 

Если кто-то лучше овладевает API-интерфейсом colorbar, я хотел бы услышать от вас.

Спасибо! Adam

ответ

7

Похоже, вы передали неправильный объект конструктору colorbar.

Это должно работать:

# make namespace explicit 
from matplotlib import pyplot as PLT 

cbar = fig.colorbar(result) 

Сниппет выше, основан на коде в вашем ответе; вот полный, автономный пример:

import numpy as NP 
from matplotlib import pyplot as PLT 

A = NP.random.random_integers(0, 10, 100).reshape(10, 10) 
fig = PLT.figure() 
ax1 = fig.add_subplot(111) 

cax = ax1.imshow(A, interpolation="nearest") 

# set the tickmarks *if* you want cutom (ie, arbitrary) tick labels: 
cbar = fig.colorbar(cax, ticks=[0, 5, 10]) 

# note: 'ax' is not the same as the 'axis' instance created by calling 'add_subplot' 
# the latter instance i bound to the variable 'ax1' to avoid confusing the two 
cbar.ax.set_yticklabels(["lo", "med", "hi"]) 

PLT.show() 

Как я предположил в комментариях выше, я бы выбрал чистое пространство имен, что у вас есть - например, есть модули с тем же именем в NumPy и Matplotlib.

В частности, я хотел бы использовать этот оператор импорта для импорта «ядра» Matplotlib в черчении функциональности:

from matplotlib import pyplot as PLT 

Конечно, это не получает все пространство имен Matplotlib (который на самом деле смысл этого оператора импорта), хотя это, как правило, все, что вам нужно.

+0

Из интереса @doug, почему вы используете PLT и NP? – bdforbes

+0

@bdforbes: так что я просто как пространства имен, которые чисты (не перекрываются с другим), плюс я просто хочу иметь быстрый визуальный способ идентифицировать их в моем коде - здесь, конечно, и PLT, и NP являются локальными переменными, связанными с библиотека/модуль, который включает в себя другие модули. – doug

1

Я знаю, что это может быть слишком поздно, но ...
Для меня заменить в последней строке кода Адама result по ax работает.

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