调用plt.show()后,如何保持上一个绘图而不清除图形,而不只是重复调用?

2024-09-16 06:21:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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的调用之外,必须有更好的方法


Tags: importnumpy绘图示例plotmatplotlibasshow
1条回答
网友
1楼 · 发布于 2024-09-16 06:21:09

(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之前对绘图进行Pickle处理:我不知道这对复杂绘图的效果如何,但似乎可以在调用plt.show之前对绘图进行Pickle处理,然后立即恢复。然后,可以在下一次调用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)操纵图形管理器和画布:基本上,图形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()

相关问题 更多 >