当同时满足以下两个条件时,我无法让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)中

最佳答案

这可能与以下文档有关:

在新图形窗口中将数组显示为矩阵。

但是,您也可以将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.matshow是围绕ax.matshow的非常薄的包装,主要用于创建新图像。

如果子图中的matshowimshow仍然存在问题,请举一个最小的完整示例供我们尝试!这是我在交互式外壳程序(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吗?)

我得到了:

关于python - 在具有交互模式的子图中显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24540832/

10-09 17:13