#python #matplotlib #plot
#python #matplotlib #график
Вопрос:
Я хочу использовать некоторые данные, полученные инструментами. Работает следующее (случайные данные в качестве примера):
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import random
from itertools import count
import time
%matplotlib qt
fields, volts = [], []
index = count()
def animate(i):
global fields, volts
fields.append(next(index))
volts.append(random.randint(0, 5))
plt.cla()
plt.plot(fields, volts)
fig = plt.figure(figsize=(8,4))
ax = fig.add_subplot(111)
ani = FuncAnimation(fig, animate, 1000)
plt.show()
… но мне нужно, чтобы обновление данных происходило вне FuncAnimation, в его собственном цикле.
Я полагал, что это может сработать, но следующий код просто открывает окно и не обновляет его, пока я не остановлю программу:
fields, volts = [], []
index = count()
def animate(i):
global fields, volts
plt.cla()
plt.plot(fields, volts)
fig = plt.figure(figsize=(8,4))
ax = fig.add_subplot(111)
ani = FuncAnimation(fig, animate, 1000)
plt.show()
while (True):
time.sleep(1)
fields.append(next(index))
volts.append(random.randint(0, 5))
Ответ №1:
Попробуйте это, FuncAnimation периодически вызывает ваш animate, чтобы вы могли перенести свои операторы append в этот цикл, а также управлять интервалом, используя аргумент interval
ключевого слова.
fields, volts = [], []
index =iter(range(20))
from numpy import random
def animate(i):
global fields, volts
fields.append(len(volts))
volts.append(random.randint(0,5))
plt.cla()
plt.plot(fields, volts, c='c')
fig = plt.figure(figsize=(8,4))
ax = fig.add_subplot(111)
ani = FuncAnimation(fig, animate, frames=20, interval=1000)
plt.show()