1

当以下两个条件都为真时,我无法让 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 (最终用例是在图中有超过 1 个子图)?这发生在 python (2.7.6) 和 ipython (1.1.1)

4

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?)

我得到了什么:

在此处输入图像描述

于 2014-07-02T21:01:36.667 回答