Мне нужна ваша помощь, чтобы написать скрипт на Python, который будет принимать динамически измененные данные, источник данных здесь не имеет значения, и отображать график на экране.
Я знаю, как использовать matplotlib, нопроблема с matplotlib, что я могу отображать график только один раз, в конце скрипта.Мне нужно иметь возможность не только отображать график один раз, но и обновлять его на лету, каждый раз, когда данные меняются.
Я обнаружил, что для этого можно использовать wxPython с matplotlib, но этонемного сложнее сделать это для меня, потому что я совсем не знаком с wxPython.
Так что я буду очень рад, если кто-нибудь покажет мне простой пример использования wxPython с matplotlib для отображения и обновления простого графика.Или, если это какой-то другой способ сделать это, мне тоже будет хорошо.
PS:
Хорошо, поскольку никто не ответил и не посмотрел на помощь matplotlib, замеченную @janislaw, и написал некоторый код,Вот какой-то фиктивный пример:
import time
import matplotlib.pyplot as plt
def data_gen():
a=data_gen.a
if a>10:
data_gen.a=1
data_gen.a=data_gen.a+1
return range (a,a+10)
def run(*args):
background = fig.canvas.copy_from_bbox(ax.bbox)
while 1:
time.sleep(0.1)
# restore the clean slate background
fig.canvas.restore_region(background)
# update the data
ydata = data_gen()
xdata=range(len(ydata))
line.set_data(xdata, ydata)
# just draw the animated artist
ax.draw_artist(line)
# just redraw the axes rectangle
fig.canvas.blit(ax.bbox)
data_gen.a=1
fig = plt.figure()
ax = fig.add_subplot(111)
line, = ax.plot([], [], animated=True)
ax.set_ylim(0, 20)
ax.set_xlim(0, 10)
ax.grid()
manager = plt.get_current_fig_manager()
manager.window.after(100, run)
plt.show()
В этой реализации есть проблемы, такие как остановка скрипта, если вы пытаетесь переместить окно.Но в основном это можно использовать.