无法在Jupyter QtConsole中绘制colorbar:找不到mappable ...错误

时间:2016-02-09 11:48:34

标签: python matplotlib plot jupyter qtconsole

我看下面的例子来绘制图像和色彩图:

enter image description here

代码:

imgplot = plt.imshow(lum_img)
plt.colorbar()

从这里开始:http://matplotlib.org/users/image_tutorial.html

但是当我从我的控制台执行此操作时,我得到:

enter image description here

即。立即显示图像,不等待第二个命令,并在第二个命令后发生以下错误:

  

RuntimeError:找不到用于创建颜色栏的mappable。首先定义一个可映射的图像(使用imshow)或轮廓集(使用contourf)。

1 个答案:

答案 0 :(得分:4)

这是因为您单独运行两个命令。

在第一个命令中,图像以内嵌方式创建和显示。然后图形对象被丢弃,不能再被更改。

第二个命令现在适用于不包含图像的新图形。

有几种可能的解决方案:

示例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:内联绘图

如果你想要内联模式,你可以在一个输入行中简单地执行多个命令,如下所示。

enter image description here

示例4:高级内联绘图

手动创建一个图形对象。对该对象执行操作(创建子图,绘制图像,添加颜色条),并通过在命令行中输入其名称随时显示内联图。

enter image description here