发生这种情况是因为您分别运行这两个命令。
在第一个命令中,图像被创建并内联显示。然后图形对象被丢弃,不能再更改。
第二个命令现在适用于不包含图像的新图形。
有几种可能的解决方案:
示例 1:正常模式
这将在单独的窗口中显示该图。所有操作都适用于同一个图窗,该图窗在使用 显示之前保持不可见plt.show()
。然后,此函数会阻止脚本,直到图形关闭。
In [1]: import matplotlib.pyplot as plt
In [2]: import matplotlib.image as mpimg
In [3]: img = mpimg.imread('/tmp/stinkbug.png')
In [4]: lum_img = img[:, :, 0]
In [5]: plt.imshow(lum_img)
Out[5]: <matplotlib.image.AxesImage at 0x7f1a24057748>
In [6]: plt.colorbar()
Out[6]: <matplotlib.colorbar.Colorbar at 0x7f1a24030a58>
In [7]: plt.show()
示例 2:交互模式
这与示例 1 相同,但图形窗口会立即显示并随着连续的绘图调用而更新。(对我来说,这在 IPython 中有效,但在 Jupyter QtConsole 中我只得到一个黑色窗口。)
In [1]: import matplotlib.pyplot as plt
In [2]: import matplotlib.image as mpimg
In [3]: plt.ion()
In [4]: img = mpimg.imread('/tmp/stinkbug.png')
In [5]: lum_img = img[:, :, 0]
In [6]: plt.imshow(lum_img)
Out[6]: <matplotlib.image.AxesImage at 0x7f7f2061e9b0>
In [7]: plt.colorbar()
Out[7]: <matplotlib.colorbar.Colorbar at 0x7f7f20605128>
示例 3:内联绘图
如果你想要内联模式,你可以简单地在一个输入行中执行多个命令,就像这样。

示例 4:高级内联绘图
手动创建图形对象。对该对象执行操作(创建子图、绘制图像、添加颜色条)并随时通过在命令行中键入其名称来显示内联图形。
