【问题标题】:Force python to auto-scale the colorbar in image every iteration强制python在每次迭代时自动缩放图像中的颜色条
【发布时间】:2016-09-26 23:21:50
【问题描述】:

我有一个使用'set_data' 命令的循环,这样我就可以在循环中使用 Python 快速成像数据。这是受到这个答案here 的启发。

但是,一个问题是,似乎每次进入新图像时都不会重新调整色轴。这使得每次绘制新图像时都越来越难以查看图像中的细节。

我试图强制 Python 在每次迭代时简单地自动缩放颜色轴,但我似乎不能这样做。这就是我所拥有的:

fig, ax = plt.subplots()
im = ax.imshow(someImage[:,:,0], interpolation='none')
ax.set_aspect('auto'); fig.show(); 
for ii in range(numberOfImages):
    im.set_data(someImage[:,:,ii]);
    fig.show();
    plt.pause(0.2);

这对于在 Python 的 for 循环中快速更新图像非常有效,但是如何在每次迭代时强制颜色比例为自动?

谢谢。

巴特回答后的错误信息:

2016-05-30 13:34:06.574 python[26795:3953860] setCanCycle: 是 已弃用。请改用 setCollectionBehavior 2016-05-30 13:34:06.586 python[26795:3953860] setCanCycle: 已弃用。请 改用 setCollectionBehavior 2016-05-30 13:34:06.588 python[26795:3953860] setCanCycle: 已弃用。请用 setCollectionBehavior 改为 2016-05-30 13:34:06.920 python[26795:3953860] setCanCycle: 已弃用。请用 改为 setCollectionBehavior /Users/roger/anaconda2/lib/python2.7/site-packages/matplotlib/backend_bases.py:2437: MatplotlibDeprecationWarning:使用默认事件循环直到函数 特定于这个 GUI 实现了 warnings.warn(str, mplDeprecation)"

【问题讨论】:

  • 在循环中添加plt.draw()以重绘绘图。
  • 如果您要显示某些内容的时间依赖性,您希望将相同的颜色图应用于所有图像并且matplotlib 的行为是正确的。您想要更改的是为初始颜色图选择一个比最初选择的范围更大的范围,根据第一张图像中的数据范围进行定制,以便将其应用于所有图像序列。
  • @gboffi 是的,如果我关心时间依赖性,你是对的,这就是我所做的。但是在这种情况下,我不关心时间依赖性,因此我想在每次迭代时简单地重新设置颜色图比例,以便我可以以适当的对比度看到信号。如何在图像的基础上重新缩放它?谢谢
  • @StanleyR 这似乎无法解决问题 - 颜色缩放仍未自动更改。

标签: python matplotlib colors figure


【解决方案1】:

您可以使用im.set_clim() 手动更改vminvmax,然后颜色栏(假设您所说的“颜色轴”)会自动重新缩放:

import matplotlib.pylab as pl
import numpy as np

pl.close('all')

someImage = np.random.random((4,4,3))
someImage[:,:,1] *= 10
someImage[:,:,2] *= 100

fig, ax = pl.subplots()
im = ax.imshow(someImage[:,:,0], interpolation='none')
pl.colorbar(im)
ax.set_aspect('auto'); fig.show(); 
for ii in range(1,3):
    im.set_data(someImage[:,:,ii]);
    im.set_clim(vmin=someImage[:,:,ii].min(), vmax=someImage[:,:,ii].max())
    fig.show();
    pl.pause(1.0);

【讨论】:

  • 嗨,巴特,谢谢,但不幸的是它不起作用:我收到一个错误。 (有关错误,请参阅我编辑的帖子)。谢谢。
  • 不知道这是从哪里来的。快速搜索为我提供了以下信息:stackoverflow.com/questions/30818222/…
  • 好像和matplotlib后端有关(我用的是MacOSX);我明天会尝试其他一些,但您可能还想尝试其他一些,看看是否确实会导致此错误/警告。
  • 为了简化我的搜索:您使用的是哪个后端?
  • 嗨@Bart,我似乎也在使用“MacOSX”...(我刚刚检查了后端)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 2021-10-19
  • 2019-08-16
  • 2021-03-28
相关资源
最近更新 更多