Matplotlib и Kivy: как эффективно обновлять оси вставки xlim и ylim?
Я пытаюсь создать плоттер данных, используя matplotlib в графическом интерфейсе на основе Kivy. У меня есть 48 полиномов на том же графике, что и Line2D. Некоторые из них могут пересекаться во многих точках. Таким образом, мне нужно иметь оси вставки, чтобы представить параметр масштабирования. Я обновляю массив позиций с помощью обратного вызова on_touch_move и перерисовываю график в запланированном обратном вызове, используя Clock.schedule_interval. Проблема в том, что обновление врезки происходит очень медленно. В Windows это занимает 70 мс, что незначительно, но в Android это очень тормозит. Справочный фрагмент ниже.
`
def plot_graph(self):
self.fig, self.ax = plotter.subplots(1, 1)
self.axin = inset_axes(self.ax, width=4, height=2)
self.fig.tight_layout()
for data in data_set:
line, = self.ax.plot(data)
self.axin.plot(data)
self.add_widget(FigureCanvasKivyAgg(self.fig))
Clock.schedule_interval(self.update_inset, .1) # .2 does not work also
mark_inset(self.ax, self.axin, loc1=1, loc2=3)
def on_touch_move(self, touch):
if self.collide_point(*touch.pos):
point = self.ax.transData.inverted().transform(touch.pos)
self.inset_points = point[0] - 2.5, point[0] + 2.5, point[1] - .25, point[1] + .25
def update_inset(self, *args):
if len(self.inset_points) == 4: # To avoid crashes before graph drawn
self.axin.set_xlim(self.inset_points[0], self.inset_points[1])
self.axin.set_ylim(self.inset_points[2], self.inset_points[3])
self.axin.figure.canvas.draw()
`
Я пробовал funcAnimation, но не помогло, так как он не совместим с Kivy. Планирование кажется лучшим способом обновления, но оно должно быть быстрее, по крайней мере, для Android.