当前位置: 首页 > 面试题库 >

调用pyplot.show()后保存图形会导致文件为空

曾泳
2023-03-14
问题内容

以下示例代码生成一个简单的图,然后将其保存到“ fig1.pdf”,然后显示它,然后再次将其保存到“
fig2.pdf”。第一张图片看起来像预期的一样,但是第二张图片是空白的(包含白色正方形)。这到底是怎么回事?这条线plt.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')

问题答案:

如果要在显示图形后保存图形,则需要保留图形实例plt.savefig调用后不起作用的原因show是当前数字已被重置。

pyplot跟踪show幕后场景中哪些图形,轴等是“当前”(即尚未显示)。 gcfgca 等的 Ç urrent
˚F igure和电流 一个 分别XES实例。
plt.savefig(以及基本上任何其他pyplot方法)都可以plt.gcf().savefig(...)。换句话说,获取当前的图形实例并调用其savefig方法。同样plt.plot基本上没有plt.gca().plot(...)

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

通常,最好直接使用图形和轴实例进行绘图/保存/显示/等,而不是使用plt.plot,等隐式获取当前图形/轴并在其上绘图。使用pyplot所有东西(尤其是交互方式)并没有什么错,但是它可以更轻松地拍摄自己的脚。

使用pyplotplt.show()并产生一个数字和轴(多个)对象,但随后直接使用数字或轴的方法。(例如,ax.plot(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。例如:

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


 类似资料:
  • 我不熟悉android camera API,代码中调用了PictureCallback,其中包含: 对这一行指出的例外情况是: 因为我是Android世界的新手,我不知道这个环境到底在哪里。getExternalStorageDirectory()指出。 例外说明: JAVA木卫一。FileNotFoundException:/storage/emulated/0 est。jpg:打开失败:EA

  • 问题内容: 我在名为bot4CA.py的模块上使用cProfile,因此在控制台中键入: 模块运行并退出后,它将创建一个名为Thing.txt的文件,当我打开它时,那里有一些信息,其余的是一堆字符,而不是我想要的整齐的数据文件。有没有人知道如何使用cProfile并最终得到整齐有序的数据表,就像在命令行中正常使用时一样(除了在文件中)?这是.txt文件中某些数据的示例: 我真正想要的是,当您调用c

  • 在我的java项目中,我将图形与这个库“图形流”一起使用。 我需要将我的图形保存在一个类型文件“Graphviz Dot”中,即:节点、边、节点属性、边属性。我通常用这种方式把我的图形保存在文件中: 问题:当我打开或加载文件时,我看不到边缘属性。有人知道“图形流”并且知道我可以保存这个文件吗? 感谢您的帮助。

  • 问题内容: 从到目前为止的经验来看,有几种不同的方法可以将TensorFlow图转储到文件中,然后再将其加载到另一个程序中,但是我无法找到关于它们如何工作的清晰示例/信息。我已经知道的是: 使用a将模型的变量保存到检查点文件(.ckpt)中,并在以后还原它们(源) 将模型保存到.pb文件,然后使用和(source)将其加载回 从.pb文件加载模型,对其进行重新训练,然后使用Bazel将其转储到新的

  • PlayScreen类: 玩家等级: 所以,我正在使用矩形来检测我的碰撞。我已经设置了右矩形和左矩形作为我屏幕的边界线。我想给玩家分配一个精灵和一个矩形。我正在处理PlayScreen类中的碰撞,但它导致了NullPointerException。需要帮助来弄清楚为什么我得到了NullPointerException。 谢谢! 空指针异常:

  • 我有一个基于spring的java web应用程序,它使用HSQLDB dbms后端在事务中插入大量记录。为了减少为要插入的记录生成主键的往返次数,我想创建一个存储过程,生成主键,在插入之前将其用作标识符。因此,我用以下代码创建了一个存储过程: 有一个序列GENERATE_PKS_SEQ,用于为要插入的记录生成唯一标识符。此存储过程需要一个数字输入(NUMBEROFIDS)来定义要生成的密钥数。