Ответ 1
Во-первых, я думаю, вы немного запутались между осями (в основном, сюжет), фигурой, скалярным отображением (образ в данном случае) и экземпляром colorbar.
figure
- это окно, в котором находится сюжет. Это контейнер верхнего уровня.
Каждая фигура обычно имеет один или несколько axes
. Это графики/подзаголовки.
Колодки также находятся внутри фигуры. Добавление цветовой панели создает новые оси (если не указано иное) для отображаемой цветной панели. (Обычно ее нельзя отображать в тех же осях, что и изображение, потому что цветная панель должна иметь свои собственные пределы x и y, и др.)
Некоторая часть вашей путаницы связана с тем, что вы смешиваете интерфейс состояния и машины OO. Это нормально для этого, но вам нужно понять интерфейс OO.
fig.axes[1]
не является экземпляром colorbar. Это оси, на которых нанесена цветная панель. (Кроме того, fig.axes[1]
- это только вторая ось на рисунке. Это, как правило, оси, в которых используется цветная панель для фигуры с одним подзаголовком и одним цветным баром, t обычно имеет место.)
Если вы хотите обновить цветную панель, вам нужно удержать экземпляр 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
для обновления цветной панели, она ожидает ScalarMappable
(например, изображение, созданное imshow
, коллекция, созданная scatter
, ContourSet
, которая contour
создает и т.д.), которые должны быть переданы. (Есть и другие способы сделать это. Часто вы просто хотите обновить лимиты, а не все это.) В случае с кодом выше вы должны позвонить cbar.update_normal(im)
.
Однако вы не создали новый AxesImage
, вы только что изменили его данные. Поэтому вы, вероятно, просто хотите сделать:
cbar.set_clim(newimg.min(), newimg.max())