【发布时间】:2021-05-20 09:29:28
【问题描述】:
我在 Jupyter 中使用以下示例代码。它对滑块值的调整的响应相对延迟。如何提高性能?原则上,我不想每次移动其中一个滑块时都重新绘制整个图。然后应该只重绘曲线(但如何重绘?)。
%matplotlib inline
from ipywidgets import interactive
import matplotlib.pyplot as plt
import numpy as np
def f(omega, phi):
plt.figure()
t = np.linspace(0, 10, num = 1000)
y = sin(omega * t + phi)
plt.plot(t, y)
plt.ylim(-1, 1)
plt.show()
interactive_plot = interactive(f, omega=(0.1, 5, 0.1), phi=(0, 5, 0.1))
interactive_plot
【问题讨论】:
-
我有几个建议,如果它们适合您的用例,我们可以详细讨论它们:) 1) 增加步骤,即 omega=(0.1,5,0.5),所以它不是每 0.1 计算一次,而是 0.5。 2)预先计算所有值(不是一个非常可扩展的解决方案,但如果范围有限,那么它应该可以工作!)
-
@user12758604:谢谢,但是如何将 y 曲线的更新与绘图的其余部分分开?可以发个答案吗?
-
我尝试做一些优化(将
plt.figure()和t=np.linspace(0,10,num=1000)移出def 范围,因为它们只需要在每次调用函数时执行一次。)但效果可以忽略不计。将plt.show()更改为plt.draw()确实将速度提高了 3 倍time.time()措施,但是,我认为它对我们的人眼来说仍然相当缓慢..抱歉!
标签: python jupyter-notebook ipywidgets