十六、实时图表

在这篇 Matplotlib 教程中,我们将介绍如何创建实时更新图表,可以在数据源更新时更新其图表。 你可能希望将此用于绘制股票实时定价数据,或者可以将传感器连接到计算机,并且显示传感器实时数据。 为此,我们使用 Matplotlib 的动画功能。

最开始:

  1. import matplotlib.pyplot as plt
  2. import matplotlib.animation as animation
  3. from matplotlib import style

这里,唯一的新增导入是matplotlib.animation as animation。 这是一个模块,允许我们在显示之后对图形进行动画处理。

接下来,我们添加一些你熟悉的代码,如果你一直关注这个系列:

  1. style.use('fivethirtyeight')
  2. fig = plt.figure()
  3. ax1 = fig.add_subplot(1,1,1)

现在我们编写动画函数:

  1. def animate(i):
  2. graph_data = open('example.txt','r').read()
  3. lines = graph_data.split('\n')
  4. xs = []
  5. ys = []
  6. for line in lines:
  7. if len(line) > 1:
  8. x, y = line.split(',')
  9. xs.append(x)
  10. ys.append(y)
  11. ax1.clear()
  12. ax1.plot(xs, ys)

我们在这里做的是构建数据,然后绘制它。 注意我们这里不调用plt.show()。 我们从一个示例文件读取数据,其内容如下:

  1. 1,5
  2. 2,3
  3. 3,4
  4. 4,7
  5. 5,4
  6. 6,3
  7. 7,5
  8. 8,7
  9. 9,4
  10. 10,4

我们打开上面的文件,然后存储每一行,用逗号分割成xsys,我们将要绘制它。 然后:

  1. ani = animation.FuncAnimation(fig, animate, interval=1000)
  2. plt.show()

我们运行动画,将动画放到图表中(fig),运行animate的动画函数,最后我们设置了 1000 的间隔,即 1000 毫秒或 1 秒。

运行此图表的结果应该像往常一样生成图表。 然后,你应该能够使用新的坐标更新example.txt文件。 这样做会生成一个自动更新的图表,如下:

十六、实时图表 - 图1