Как установить экстенты цветовой шкалы matplotlib? - PullRequest
4 голосов
/ 29 марта 2010

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

Мне удалось успешно нарисовать изображение и цветную полосу, но минимальные и максимальные значения цветовой полосы представляют нормализованное (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-интерфейсом цветовой панели, я хотел бы услышать от вас.

Спасибо! Адам

Ответы [ 2 ]

7 голосов
/ 29 марта 2010

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

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

# 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 (что действительно является точкой этого оператора импорта), хотя обычно это все, что вам нужно.

1 голос
/ 03 июля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...