Matplotlib линейная линия в реальном времени
У меня есть серьезная неудача по этому вопросу на некоторое время...
import numpy as np
import matplotlib.pyplot as plt
plt.ion()
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.set_title("linear realtime")
line, = ax.plot([],[])
i = 0
while ( i < 1000 ):
#EDIT:
# this is just sample data, but I would eventually like to set data
# where it can be floating numbers...
line.set_data(i,i)
fig.canvas.draw()
i += 1
Я пытаюсь провести линейную линию в реальном времени, но я не могу придумать результат. Заранее спасибо. До сих пор у меня появилась фигура, но на холсте ничего не рисуется.
EDIT:
Интересно.... Теперь я могу нарисовать точки на линии, но теперь я не могу показать их связь между каждой точкой... Я также заметил, что если вы удалили ko-, когда она была построена... ничего не появляется, кто-нибудь знает почему?
import numpy as n
import pylab as p
import time
x=0
y=0
p.ion()
fig=p.figure(1)
ax=fig.add_subplot(111)
ax.set_xlim(0,10)
ax.set_ylim(0,10)
line,=ax.plot(x,y,'ko-')
for i in range(10):
x = i
y = i
line.set_data(x,y)
p.draw()
Ответы
Ответ 1
добавьте p.pause(.001)
в свой цикл. Вы должны дать время, чтобы циклы событий gui запускали и обновляли дисплей.
Это связано с проблемой # 1646.
Другая проблема заключается в том, что, когда вы выполняете set_data
, он заменяет данные, которые строятся с переданными x
и y
, а не добавляет к уже имеющимся данным. (Чтобы увидеть это, используйте p.pause(1)
). Когда вы удаляете 'ko-'
, который по умолчанию не имеет маркера с точкой подключения линии, вы накладываете одну точку, поэтому ничего не появляется.
Думаю, вы намеревались написать это:
x=0
y=0
fig=plt.figure(1)
ax=fig.add_subplot(111)
ax.set_xlim(0,10)
ax.set_ylim(0,10)
line,=ax.plot(x,y,'ko-')
for i in range(10):
x = np.concatenate((line.get_xdata(),[i]))
y = np.concatenate((line.get_ydata(),[i]))
line.set_data(x,y)
plt.pause(1)