Matplotlib绘图和imshow

27

对我来说,matplotlib的plot和imshow行为令人困惑。

import matplotlib as mpl
import matplotlib.pyplot as plt
如果我在调用plt.imshow(i)之前调用plt.show(),就会出现错误。如果我在调用plt.show()之前调用plt.imshow(i),则一切正常。但是,如果我关闭第一个打开的图形,然后调用plt.imshow(i),就会显示一个新的图形而不调用plt.show()。请问这是为什么?
1个回答

43
如果在调用plt.imshow(i)之前调用plt.show(),会出现错误。如果先调用plt.imshow(i),再调用plt.show(),则一切正常。 plt.show()用于显示图形(并进入使用的任何GUI后端的主循环)。只有在绘制完图形并希望查看显示效果时才应该调用它。 plt.imshow()在当前图中绘制图像(如果没有当前图,则创建一个新图)。在绘制任何内容之前调用plt.show()是没有意义的。如果想要显式地创建新的图形,请使用plt.figure()。
除非您在类似于ipython的pylab模式下运行代码,在这种情况下,GUI后端的主循环将在单独的线程中运行,否则不会出现“...不使用plt.show()即可显示新图”的情况。
一般来说,plt.show()将是脚本的最后一行。(或者在任何情况下,当您希望停止和可视化所绘制的图时都可以调用它。)希望这能让您更好地理解。

2
如果您想显示一系列图像,并暂停一段时间以将每个图像显示到屏幕上,然后继续显示下一个图像,该怎么办?您必须在某个时刻调用show()函数,但是如果这样做,那么您就无法执行余下的代码来显示下一个图像。 - ely
1
只需开始一个新图 plt.figure(),或关闭先前的图 plt.close()。 - j13r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接