line_plot.py 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. from typing import List
  2. from .plot import Plot
  3. class LinePlot(Plot):
  4. def __init__(self, n: int = 1, limit: int = 100, close: bool = True):
  5. super().__init__(close)
  6. self.x = []
  7. self.Y = [[] for _ in range(n)]
  8. self.lines = [self.fig.gca().plot([], [])[0] for _ in range(n)]
  9. self.slice = slice(0 if limit is None else -limit, None)
  10. def with_legend(self, titles: List[str], **kwargs):
  11. self.fig.gca().legend(titles, **kwargs)
  12. self.view.set_figure(self.fig)
  13. return self
  14. def push(self, x: List[float], Y: List[List[float]]):
  15. self.x = [*self.x, *x][self.slice]
  16. for i in range(len(self.lines)):
  17. self.Y[i] = [*self.Y[i], *Y[i]][self.slice]
  18. self.lines[i].set_xdata(self.x)
  19. self.lines[i].set_ydata(self.Y[i])
  20. flat_y = [y_i for y in self.Y for y_i in y]
  21. self.fig.gca().set_xlim(min(self.x), max(self.x))
  22. self.fig.gca().set_ylim(min(flat_y), max(flat_y))
  23. self.view.set_figure(self.fig)