当以下两个条件都成立时,我无法获得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)
中答案 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.matshow
是ax.matshow
周围非常薄的包装器,主要用于创建新图像。
如果您在子图中仍然遇到matshow
或imshow
的问题,请为我们做一个最小的完整示例!这是我在交互式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
?)
我得到了什么: