实时绘图
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 100)
# plt.axis([x[0], x[-1], -1, 1]) # disable autoscaling
for point in x:
plt.plot(point, np.sin(2 * point), '.', color='b')
plt.draw()
plt.pause(0.01)
# plt.clf() # clear the current figure
如果数据量太大,您可以使用简单的计数器降低更新速率
cnt += 1
if (cnt == 10): # update plot each 10 points
plt.draw()
plt.pause(0.01)
cnt = 0
程序退出后
保持图
这是我无法找到满意答案的实际问题,我希望在脚本完成后没有关闭的绘图(如MATLAB),
如果你考虑一下,在脚本完成之后,程序就会被终止,没有合理的方法来保存这个图,所以有两种选择
阻止脚本退出(这是plt.show()而不是我想要的)
在单独的线程上运行绘图(太复杂)
这对我来说并不令人满意,所以我发现了另一种解决方案
SaveToFile和外部查看器中的查看
为此,保存和查看应该都很快,并且查看器不应该锁定文件和 should update the content automatically
选择保存格式
基于矢量的格式既小又快
SVG 很好,但除了网页浏览器默认需要手动更新外,没有找到好的浏览器
PDF 可以支持矢量格式,并且有支持实时更新的轻量级查看器
具有实时更新的快速轻量级查看器
对于 PDF ,有几个不错的选择
在Windows上我使用SumatraPDF这是免费的,快速的和轻的(我的情况下只使用1.8MB RAM)
在Linux上有几个选项,如Evince(GNOME)和Ocular(KDE)
示例代码和结果
用于将绘图输出到文件的示例代码
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(2 * x)
plt.plot(x, y)
plt.savefig("fig.pdf")
首次运行后,打开上面提到的一个查看器中的输出文件并欣赏 .
这是VSCode和SumatraPDF一起的截图,也是这个过程足够快以获得半实时更新率(我的设置可以接近10Hz,只需在间隔之间使用 time.sleep() )