Как принудительно запускать обновления для динамических графиков в Google Colab без взаимодействия с пользователем?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как принудительно запускать обновления для динамических графиков в Google Colab без взаимодействия с пользователем?

Сообщение Anonymous »

Я пытаюсь создать адаптивные динамические графики в Google Colab, но с обновлениями у меня возникают проблемы с производительностью.
Для минимального примера я сделал простую диаграмму рассеяния. случайных значений с меняющимся заголовком. Изначально сюжет обновляется плавно первые несколько кадров, но быстро начинает тормозить или даже вовсе зависать. Я обнаружил странный обходной путь: спам-нажатие на фигуру приводит к тому, что обновления выполняются более последовательно, примерно каждую секунду.
Мне интересно, есть ли способ «имитировать» этот спам -щелчок или отправка какого-либо события, чтобы заставить Colab обновить фигуру более надежно, не требуя прямого взаимодействия с пользователем. Пока что я не нашел ничего, что работало бы хорошо.
Я открыт для любых предложений, даже хакерских обходных путей, если они помогают поддерживать актуальность обновлений сюжета и не позволяют Colab "отложить сюжет."
Изображение
https://colab.research.google.com/drive ... sp=sharing
%pip install ipympl

from google.colab import output
output.enable_custom_widget_manager()
%matplotlib ipympl

import matplotlib.pyplot as plt
import numpy as np
import threading
import time
figure, ax = plt.subplots()
line = ax.plot([],[], 'o')
ax.set_xlim(0,100)
ax.set_ylim(0,1)

figure._canvas_callbacks._signals += ["fake_event"]
def wtf_event(*args,**kwargs):
print(flush=True, end="")
# print(args,kwargs)
figure.canvas.mpl_connect('fake_event', wtf_event)

def work1(figure,ax,line):
total = 100
for i in range(total):
X,Y = np.arange(100), np.random.rand(100) # data
figure.suptitle(i) # update title
line[0].set_data(X, Y) # update plot

figure.canvas.flush_events()
# figure.canvas.draw() # causes issues, if the delay is too long doesn't draw at all
figure.canvas.draw_idle()

# plt.pause(0.2) # throws errors
time.sleep(0.2) # actual display can take from instantly to 30 seconds (or more) in colab,
# colab also required cell to be "actively in focus" to update, repeatedly clicking on the plot "helps" it update (about 1 second)

figure.canvas.callbacks.process("fake_event")

thread = threading.Thread(target=work1, args=(figure,ax,line))
thread.start()


Подробнее здесь: https://stackoverflow.com/questions/790 ... thout-user
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»