How to retrieve colorbar instance from figure in matplotlib
所有。我想在图像数据更改时更新图形的颜色条。比如:
1 2 3 4 5 6 7 8 9 10 11 | 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实例作为参数传递给update函数,但我认为只传递一个fig参数就足够了。有人能稍微解释一下如何从图中检索颜色条吗?或者为什么"fig.axes()"不返回axesImage或colobar实例,而只返回axes或axesSubplot?我想我需要更多的理解轴/图形的东西。谢谢!
有时,即使颜色条不是保存在变量中,也可以使用它来检索颜色条。在这种情况下,可以使用以下命令从绘图中检索颜色条:
1 2 3 4 5 6 7 8 | #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 |
现在,您可以对
更新绘图后应调用
顺便说一下,图像是与颜色条相关联的可映射的,可以用
首先,我认为您在轴(基本上是绘图)、图形、标量映射(在本例中是图像)和颜色条实例之间有点困惑。
每个数字通常有一个或多个
彩条也在图中。添加颜色条将为要显示的颜色条创建新的轴(除非另有指定)。(它通常不能显示在与图像相同的轴上,因为颜色栏需要有自己的X和Y限制等。)
您的一些困惑是因为您混合了状态机接口和OO接口。可以这样做,但您需要了解OO接口。
如果要更新颜色栏,则需要保留
下面是一个你通常如何处理事情的例子:
1 2 3 4 5 6 7 8 | 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 |
如果要使用
但是,您还没有创建新的
1 | cbar.set_clim(newimg.min(), newimg.max()) |
号