当以下两个条件都成立时,我无法让 matshow() 或 imshow() 实际显示绘图:(1) 交互模式打开:import matplotlib.pyplot asplot; (2) 我尝试在特定的子图上使用 matshow:fig =plot.figure();斧头 = 图.add_subplot(111); ax.matshow([[1,2],[3,0]])
.
使用 plot.matshow([[1,2],[3,0]])
(注意:没有显式轴)可以在交互模式下查找,但始终会创建一个新的图形窗口使用单个轴对象。上面带有子图的代码在没有使用plot.show()的交互模式的情况下也可以正常工作,并且会将图像放在正确的轴上。
更奇怪的是,如果我与图形交互,例如通过使用缩放工具并在图形窗口中随机单击(没有可见的轴对象,但我只是单击某处),上面带有子图的代码将显示图像在图形窗口的中间)。
有什么想法可能导致此问题,如何修复它,或者如何解决它以在指定的子图上使用 matshow 或 imshow (最终用例是图中有超过 1 个子图)?这发生在 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
问题,请制作一个最小的完整示例供我们尝试!以下是我在交互式 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()
(问题可能是缺少绘图
吗?)
我得到了什么:
关于python - 交互模式下的子图中的 imshow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24540832/