python - 交互模式下的子图中的 imshow

标签 python matplotlib imshow

当以下两个条件都成立时,我无法让 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.matshowax.matshow 的一个非常薄的包装器,主要用于创建新图像。

如果您在子图中仍然遇到 matshowimshow 问题,请制作一个最小的完整示例供我们尝试!以下是我在交互式 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()

(问题可能是缺少绘图吗?)

我得到了什么:

enter image description here

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

相关文章:

python - 为什么我在抓取网站时会得到一个空列表?

python - 如果以特定字符串结尾,则创建一个新列

matplotlib:重绘前清除散点数据

python - matplotlib gui imshow 坐标

python - 如何在 plt.imshow() 中设置标记大小

c++ - Trackbar 结果没有出现 C++/Opencv

python - 随机变量的运算在 Tensorflow 中无法正常工作

python - 在 pyside 中使用 Qt 线程

python - NameError : name 'defaultParams' is not defined while running the . exe 使用 Pyinstaller 转换

python - 如何获取 matplotlib 条形图中的所有条形图?