python教程—在调用pyplot.show()之后保存一个图,结果是一个空文件-Python实用宝典

python教程—在调用pyplot.show()之后保存一个图,结果是一个空文件

下面的示例代码生成一个简单的图,然后将其保存为'fig1 '。,然后显示它,然后再次保存到'fig2.pdf'。第一个图像看起来和预期的一样,但是第二个图像是空白的(包含一个白色正方形)。到底发生了什么?一行pl .show()显然把什么搞砸了,但我不知道是怎么搞的!

下面的示例代码生成一个简单的图,然后将其保存为'fig1 '。,然后显示它,然后再次保存到'fig2.pdf'。第一个图像看起来和预期的一样,但是第二个图像是空白的(包含一个白色正方形)。到底发生了什么?一行pl .show()显然把什么搞砸了,但我不知道是怎么搞的!

    import numpy as np import matplotlib.pyplot as plt x = np.linspace(-1, 1, 100) y = x**2 plt.plot(x,y) plt.savefig('fig1.pdf') plt.show() plt.savefig('fig2.pdf')

回答

如果您想在显示图形后保存它,则需要保存图实例。原因是……savefig在调用show后无法工作,显示当前图形已被重置。

pyplot跟踪哪些图形、轴等在幕后是“当前的”(即尚未显示)。gcf和gca分别获得当前图和当前轴实例。plt。savefig(实际上是任何其他pyplot方法)只做pl .gcf().savefig(…)。换句话说,获取当前的figure实例并调用它的savefig方法。同样plt。plot主要做pl .gca().plot(…)。

调用show之后,“当前”图和轴的列表为空。

通常,您最好直接使用figure和axis实例来绘制/保存/显示/等等,而不是使用plt。等,隐式地获取当前图形/坐标轴并在其上绘图。使用pyplot做任何事情(特别是交互)都没有错,但是它使您更容易搬起石头砸自己的脚。

使用pyplot for pl .show()并生成一个图和一个axis对象,然后直接使用图或axis方法。(如斧。用(x, y)代替plt。plot(x, y)等的主要优点是它是显式的。您知道要绘制的对象是什么,并且不需要对pyplot状态机做什么进行推理(尽管理解状态机接口也不是那么困难)。

作为“推荐”做事方式的一个例子,你可以这样做:

    import numpy as np import matplotlib.pyplot as plt x = np.linspace(-1, 1, 100) y = x**2 fig, ax = plt.subplots() ax.plot(x, y) fig.savefig('fig1.pdf') plt.show() fig.savefig('fig2.pdf')

如果您希望对所有内容都使用pyplot接口,那么只需在调用show之前获取figure实例。例如:

    import numpy as np import matplotlib.pyplot as plt x = np.linspace(-1, 1, 100) y = x**2 plt.plot(x, y) fig = plt.gcf() fig.savefig('fig1.pdf') plt.show() fig.savefig('fig2.pdf')

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
1

发表评论