首先,我认为您在轴(基本上是绘图)、图形、可映射的标量(在本例中为图像)和颜色条实例之间有些混淆。
这figure
是绘图所在的窗口。它是顶级容器。
每个数字通常有一个或多个axes
。这些是地块/子地块。
颜色条也在图中。添加颜色条会为要显示的颜色条创建一个新轴(除非您另外指定)。(它通常不能与图像显示在相同的轴上,因为颜色条需要有自己的 x 和 y 限制, ETC。)
您的一些困惑是由于您混合了状态机接口和 OO 接口这一事实。这样做很好,但是你需要了解OO接口。
fig.axes[1]
不是颜色条实例。它是绘制颜色条的轴。(另外,fig.axes[1]
只是图中的第二个轴。它恰好是颜色条所在的轴,用于具有一个子图和一个颜色条的图形,但通常不会是案子。)
如果要更新颜色条,则需要保留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())