Я новичок в Python matplotlib
и хочу сделать фигуру обновленной в цикле. Это простой тестовый код. Я хочу нарисовать 3 графика, каждый на 2 секунды, с разными склонами каждый раз. Конечно, я знаю, что я должен прочитать еще кое-что о matplotlib
, но мне нужно что-то сделать быстро. Что не так? Благодаря!обновить фигуру внутри цикла
#!/usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np
import time
def demo(a):
y = [xt*a+1 for xt in x]
ax.plot(x,y)
if __name__ == '__main__':
plt.ion()
fig, ax = plt.subplots()
ax.set_ylim([0,15])
x = range(0,5)
for a in range(1,4):
demo(a)
time.sleep(2)
Я думал plt.ion()
делает его интерактивным и ax.plot(x,y)
вступают в силу немедленно (но думаю, нет). Я попытался добавить ax.draw()
после ax.plot(x,y)
, но для этого требуются некоторые аргументы, такие как художник или что-то, чего я еще не знаю :). Кроме того, у меня появилось это сообщение об ошибке (Ubuntu 14.04.LTS).
Xlib: extension "XInputExtension" missing on display ":1.0".
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
Major opcode: 62 (X_CopyArea)
Resource id: 0x0
EDIT: Я добавляю правильный код ниже. (Согласно решению Estilus, к которому я изменил немного для корректного отображения графа.
#!/usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np
import time
def demo(a):
plt.cla()
y = [xt*a+1 for xt in x]
ax.set_ylim([0,15])
ax.plot(x,y)
if __name__ == '__main__':
plt.ion()
fig, ax = plt.subplots()
x = range(5)
for a in range(1,4):
demo(a)
plt.pause(3)
plt.draw()
Возможный дубликат [Как обновить сюжет в matplotlib?] (Http://stackoverflow.com/questions/4098131/how-to-update-a-plot-in-matplotlib) –
Возможный дубликат [Определение нескольких графики для анимации с помощью цикла for matplotlib] (http://stackoverflow.com/questions/21937976/defining-multiple-plots-to-be-animated-with-a-for-loop-in-matplotlib) – hashcode55