matplotlib 绘图与 imshow

27 投票
1 回答
45136 浏览
提问于 2025-04-16 02:52

我对matplotlib中的plot和imshow的行为感到困惑。

import matplotlib as mpl
import matplotlib.pyplot as plt

如果我在调用plt.imshow(i)之前先调用plt.show(),就会出现错误。如果我先调用plt.imshow(i)再调用plt.show(),那一切都能正常工作。不过,如果我关闭第一个打开的图形,然后再调用plt.imshow(i),就会显示一个新图形,而根本没有调用plt.show()

有人能解释一下这个情况吗?

1 个回答

43

如果我在调用 plt.imshow(i) 之前就调用了 plt.show(),那么就会出错。如果我先调用 plt.imshow(i) 再调用 plt.show(),一切就正常了。

plt.show() 是用来显示图形的(同时进入你正在使用的图形界面的主循环)。你应该等到所有东西都画好后再调用它,这样才能看到你画的内容。

plt.imshow() 是在当前的图形上绘制一张图片(如果当前没有图形,它会创建一个新的图形)。在你还没有画任何东西之前调用 plt.show() 是没有意义的。如果你想明确地创建一个新图形,可以用 plt.figure()

... 一个新图形会被显示,而不需要调用 plt.show()

这种情况只会发生在你在类似于 ipython 的 pylab 模式下运行代码时,这种模式下图形界面的主循环会在一个单独的线程中运行……

一般来说,plt.show() 应该是你脚本的最后一行。(或者在你想暂停并查看你画的图时调用它。)

希望这样能让你更明白一些。

撰写回答