Как получить экземпляр colorbar из рисунка в matplotlib

все. Я хочу обновить цветную рамку фигуры при изменении изображений. Итак, что-то вроде:

img = misc.lena() fig = plt.figure() ax = plt.imshow(im) plt.colorbar(ax) newimg = img+10*np.randn(512,512) def update_colorbar(fig,ax,newimg): cbar = fig.axes[1] ax.set_data(newimg) cbar.update_normal(ax) plt.draw() 

но кажется, что возвращенные результаты от fig.axes () не имеют экземпляра colorbar, как я ожидал. Возможно, я могу просто передать экземпляр colorbar в качестве аргумента функции обновления, но я думал, что просто один параметр fig может быть достаточно хорошим. Может ли кто-нибудь объяснить немного о том, как извлечь цветную цифру из рисунка? Или почему 'fig.axes ()' не возвращает экземпляр AxesImage или Colobar, а только оси или AxesSubplot? Я думаю, мне просто нужно больше понимания предметов Axes / Figure. Спасибо!

2 Solutions collect form web for “Как получить экземпляр colorbar из рисунка в matplotlib”

Во-первых, я думаю, вы немного запутались между осями (в основном, сюжет), фигурой, скалярным отображением (образ в данном случае) и экземпляром colorbar.

figure – это окно, в котором находится сюжет. Это контейнер верхнего уровня.

Каждая фигура обычно имеет одну или несколько axes . Это графики / подзаголовки.

Цветники также находятся внутри фигуры. Добавление цветовой панели создает новые оси (если не указано иное) для отображаемой цветной панели. (Обычно ее нельзя отображать в тех же осях, что и изображение, потому что цветная панель должна иметь свои собственные пределы x и y, и т.д.)

Некоторая ваша путаница связана с тем, что вы смешиваете интерфейс состояния и интерфейс OO. Это нормально, но вам нужно понять интерфейс OO.

fig.axes[1] не является экземпляром colorbar. Это оси, на которых нанесена цветная панель. (Кроме того, fig.axes[1] – это всего лишь вторая fig.axes[1] на рисунке. Это, как правило, оси, в которых используется цветная панель для фигуры с одним подзаголовком и одним цветным баром, но это, как правило, не будет.)

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

Вот пример того, как вы обычно подходите к вещам:

 import matplotlib.pyplot as plt import numpy as np data = np.random.random((10,10)) # Generate some random data to plot fig, ax = plt.subplots() # Create a figure with a single axes. im = ax.imshow(data) # Display the image data cbar = fig.colorbar(im) # Add a colorbar to the figure based on the image 

Если вы собираетесь использовать update_normal для обновления colorbar, он ожидает ScalarMappable (например, изображение, созданное imshow , imshow коллекция, создающая ContourSet которая создает contour и т. Д.). (Есть другие способы сделайте это, а также. Часто вы просто хотите обновить лимиты, а не все это.) В случае с кодом выше вы вызываете cbar.update_normal(im) .

Однако вы не создали новый AxesImage , вы только что изменили его данные. Поэтому вы, вероятно, просто хотите сделать:

 cbar.set_clim(newimg.min(), newimg.max()) 

Иногда бывает полезно получить цветную панель, даже если она не была сохранена в переменной. В этом случае можно получить цветную панель из графика с помощью:

 #create a test image img=np.arange(20).reshape(5,4) plt.imshow(img) plt.colorbar() ax=plt.gca() #plt.gca() for current axis, otherwise set appropriately. im=ax.images #this is a list of all images that have been plotted cb=im[-1].colorbar #in this case I assume to be interested to the last one plotted, otherwise use the appropriate index 

Теперь вы можете работать на cb как если бы он хранился, изменяя xlim или вызывая обновление, как описано в других комментариях. Или вы можете удалить его с помощью cb.remove() и воссоздать его с помощью plt.colorbar() .

plt.draw() или show следует вызывать после обновления графика.

Кстати, изображение является отображаемым, связанным с цветовой панелью, и может быть получено с помощью cb.mappable .

  • import matplotlib._png не работает
  • Как сделать штриховые графики автоматически переключаться между разными цветами?
  • Matplotlib: figlegend только печать первой буквы
  • Как построить прямоугольник на оси datetime с использованием matplotlib?
  • Юникод в ноутбуке ipython
  • Создание графика с датой и временем в осях с меткой matplotlib
  • Как изменить 2d Scatterplot для отображения цвета, основанного на третьем массиве в файле csv?
  • Установка Pylab / Matplotlib
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.