在交互模式的子图中显示

时间:2014-07-02 20:52:34

标签: python matplotlib imshow

当以下两个条件都成立时,我无法获得matshow()或imshow()来实际显示绘图:(1)交互模式打开:import matplotlib.pyplot as plot; plot.ion(),以及(2)我正在尝试使用关于特定子情节的matshow:fig = plot.figure(); ax = fig.add_subplot(111); ax.matshow([[1,2],[3,0]])

使用plot.matshow([[1,2],[3,0]])(注意:没有显式轴)可以在交互模式下查找,但始终会创建一个带有单轴对象的新图形窗口。带有子图的上述代码也可以使用plot.show()在没有交互模式的情况下正常工作,并将图像放在正确的轴上。

更奇怪的是,如果我与图形交互,上面带有子图的代码将显示图像,例如使用缩放工具并在图形窗口中随机点击(没有可见的轴对象,但我只是点击某处在图窗口的中间)。

任何可能导致这种情况的想法,我如何解决它,或者我如何绕过它来在指定的子图上使用matshow或imshow(最终用例是在图中有多个子图)?这发生在python(2.7.6)和ipython(1.1.1)

1 个答案:

答案 0 :(得分:1)

这可能与此文档有关:

在新的数字窗口中将数组显示为矩阵。

但是,您也可以使用imshow使用合适的参数:

import matplotlib.pyplot as plt

plt.imshow(mat, interpolation='nearest', origin='upper', aspect='equal')

这应该做同样的事情,而有点不那么奇怪。这实际上正是matshow内部的作用。它只是为图像添加了几个刻度标记。

另外,通过查看源代码(或仔细阅读帮助字符串),您可以尝试:

plt.matshow(mat, fignum=0)

这应该强制它使用当前轴,它使用gca选择。

除此之外,您还使用了ax.matshow。实际上plt.matshowax.matshow周围非常薄的包装器,主要用于创建新图像。

如果您在子图中仍然遇到matshowimshow的问题,请为我们做一个最小的完整示例!这是我在交互式shell(IPython)中尝试过的东西:

figure()
ax = subplot(121)
ax2 = subplot(122)
ax.matshow(random.random((20,30)))
ax2.plot(linspace(-1,1,100), linspace(-1,1,100)**2)
draw()

(问题可能是缺少draw?)

我得到了什么:

enter image description here