全部。我想在图像数据更改时更新图形的颜色栏。比如说:
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?我想我只是需要更多的理解斧头/图形的东西。谢谢!
有时检索一个colorbar是有用的,即使它不是保存在一个变量中。
在这种情况下,可以使用以下命令从绘图中检索colorbar:
现在您可以对
cb
进行操作,就好像它是使用the colorbar API中描述的命令存储的一样。例如,您可以更改xlim
或调用其他注释中解释的update。你可以用cb.remove()
删除它,然后用plt.colorbar()
重新创建它。更新绘图后应调用
plt.draw()
或show
。因为图像是与颜色栏关联的可映射的,可以通过
cb.mappable
获得。首先,我认为您在轴(基本上是绘图)、图形、标量可映射(在本例中是图像)和colorbar实例之间有点混淆。
figure
是绘图所在的窗口。这是最上层的集装箱。每个图形通常有一个或多个
axes
。这些是情节/子情节。彩色条也在图中。添加颜色栏将为要在中显示的颜色栏创建一个新轴(除非另有指定)。(它通常不能与图像在同一个轴上显示,因为颜色条需要有自己的x和y限制等。)
您的一些困惑是因为您混合了状态机接口和OO接口。这样做很好,但是您需要理解OO接口。
fig.axes[1]
不是colorbar实例。这是彩色条绘制的轴。(而且,fig.axes[1]
只是图中的第二个轴。对于一个子块和一个颜色条的图形,它恰好是颜色条所在的轴,但通常情况下不是这样。)如果要更新colorbar,则需要保留
colorbar
返回的colorbar实例。下面是一个你通常处理事情的例子:
如果要使用
update_normal
更新colorbar,则需要传入ScalarMappable
(例如,由imshow
创建的图像、由scatter
创建的集合、由ContourSet
创建的contour
等)。(也有其他方法。通常,您只想更新限制,而不是全部内容。)对于上面的代码,您将调用cbar.update_normal(im)
。但是,您没有创建新的
AxesImage
,您只是更改了它的数据。因此,您可能只想:相关问题 更多 >
编程相关推荐