В блокноте jupyter подготовьте сюжет рядом с другой анимацией. Для каждого кадра анимации график должен обновляться вертикальной линией и красной точкой, показывающей значение этого свойства. Ниже приведен минимальный рабочий пример (без анимации):
import ipywidgets as wg
import matplotlib.pyplot as plt
class interactive_plot:
def __init__(self,r):
self.X = [x for x in range(r)]
self.Y = [y for y in range(r)]
self.r = r
self.fig = None
self.ax = None
def pathPlot(self, xframe = None):
if self.fig is None:
self.fig = plt.figure()
self.ax =self.fig.add_subplot(1,1,1)
self.ax.plot(self.X, self.Y, 'bo-')
else:
self.fig = plt.gcf()
self.ax = plt.gca()
self.ax.plot(self.X, self.Y, 'bo-')
if xframe is not None:
self.ax.axvline(x = self.X[xframe],color = 'black',linestyle = '--')
self.ax.plot(self.X[xframe],self.Y[xframe], 'ro', markersize=10)
def pathPlay(self):
frame = wg.IntSlider(min = 0, max = self.r - 1)
wg.interact(self.pathPlot, xframe = frame)
test = interactive_plot(10)
test.pathPlay()
Этот минимальный пример работает "отлично". Тем не менее, в моем блокноте Jupyter есть еще одна анимация, и с увеличением количества анимаций возникает проблема с производительностью (можно увидеть, как график очищается и повторяется).
Я подумал, что, возможно, я мог бы избежать строки self.ax.plot(self.X, self.Y, 'bo-')
в операторе else
(заменяя self.fig.show ()) и просто обновить вертикальную линию красной точкой. Однако я не смог этого сделать. Каждый раз синяя линия исчезает, и я получаю только вертикальную линию и красную точку на графике.
Так что мне было интересно:
1- Как правильно обновить сюжет?
2- Я действительно получу повышение производительности? По крайней мере, я не увижу, чтобы заговор был очищен и пересмотрен, верно?