我希望有一个函数在调用时将图添加到现有图表中。现在我的空图显示,但调用函数似乎永远不会发生,因为它等到我关闭图表窗口。然后程序结束而不重新打开图表窗口。
import numpy as np
import matplotlib.pyplot as plt
import time
fig, ax = plt.subplots()
plt.show()
def plotting(slope, intercept):
x_vals = np.array(ax.get_xlim())
y_vals = intercept + slope * x_vals
ax.plot(x_vals, y_vals, '-')
plt.show()
plotting(10,39)
time.sleep(1)
plotting(5,39)
答案 0 :(得分:3)
plt.show()
意味着在脚本结束时调用一次。它将一直阻止,直到绘图窗口关闭。
您可以使用交互模式(plt.ion()
)并在中间步骤(plt.draw()
)绘制绘图。要获得暂停,请不要使用time.sleep()
因为它会让应用程序按字面意思进入睡眠状态(可能会导致冻结窗口)。相反,请使用plt.pause()
。最后,您可以再次关闭交互模式(plt.ioff()
),最后调用plt.show()
以使地块保持打开状态。
import numpy as np
import matplotlib.pyplot as plt
plt.ion()
fig, ax = plt.subplots()
def plotting(slope, intercept):
x_vals = np.array(ax.get_xlim())
y_vals = intercept + slope * x_vals
ax.plot(x_vals, y_vals, '-')
plt.draw()
plotting(10,39)
plt.pause(1)
plotting(5,39)
plt.ioff()
plt.show()
答案 1 :(得分:2)
将可选关键字参数block=False
发送至plt.show()
。
说明:绘图窗口阻止程序继续。发送此参数将允许程序继续。
请注意,如果仅使用该参数并且程序结束,则关闭绘图窗口。因此,您可能希望在程序结束时调用plt.show(block=True)
或plt.waitforbuttonpress()
。
我个人会为你自己的函数添加一个块参数:
def plotting(slope, intercept, block=True):
x_vals = np.array(ax.get_xlim())
y_vals = intercept + slope * x_vals
ax.plot(x_vals, y_vals, '-')
plt.show(block=block)
plotting(10,39,False)
time.sleep(1)
plotting(5,39)