gpt4 book ai didi

python - 调用 plt.show() 后如何保持之前的图而不清除图形而不简单地重复调用?

转载 作者:行者123 更新时间:2023-12-04 10:29:56 31 4
gpt4 key购买 nike

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))
plt.show()
plt.plot(x, np.cos(x))
plt.show()

此示例在两个窗口中生成两个连续的图,首先是左侧的图,然后是右侧的图:

Figure 1

如您所见,正弦消失了,只有余弦出现在第二个窗口中;绘图窗口已在两者之间清除。然而,这就是我想要的:

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))
plt.show()
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
plt.show()

Figure 2

我怎样才能保留上一个情节,以便它也显示在第二个情节中?除了简单地重复之前对 plt.plot 的调用之外,必须有更好的方法。 ?

最佳答案

(A) 重复之前对 plt.plot 的调用 :正如问题中提到的,可以在添加新图之前重复创建图的先前调用。对于简单的情况,这可能是最简单的解决方案。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))
plt.show()
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
plt.show()

(B) 使用 plt.waitforbuttonpress :如果这适用于您的情况,您可以使用 plt.waitforbuttonpress作为绘图之间的中断,等待鼠标单击或按键,直到下一个绘图添加到同一窗口中。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
for f in [np.sin, np.cos]:
plt.plot(x, f(x))
plt.waitforbuttonpress()

(C) 在 plt.show 之前腌制情节 :我不知道这对于复杂的情节有多好,但似乎可以在调用 plt.show 之前先对情节进行腌制,只能在之后立即恢复它。然后可以在下一次调用 plt.show 之前添加附加图。 .

import matplotlib.pyplot as plt
import numpy as np
import pickle
x = np.linspace(0, 2 * np.pi, 100)
ax = plt.gca()
for f in [np.sin, np.cos]:
plt.plot(x, f(x))
temp = pickle.dumps(ax)
plt.show()
ax = pickle.loads(temp)

(D) 操作图形管理器和 Canvas : 本质上是图 fig为每次循环迭代“加载到”新创建的图形中,然后用新图更新。

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
fig = plt.figure()
plt.close()
for f in [np.sin, np.cos]:
plt.figure()
fm = plt.get_current_fig_manager()
fm.canvas.figure = fig
fig.canvas = fm.canvas
plt.plot(x, f(x))
plt.show()
plt.close()

关于python - 调用 plt.show() 后如何保持之前的图而不清除图形而不简单地重复调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60460691/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com