当同时满足以下两个条件时,我无法让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
的非常薄的包装,主要用于创建新图像。如果子图中的
matshow
或imshow
仍然存在问题,请举一个最小的完整示例供我们尝试!这是我在交互式外壳程序(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/