mercredi 15 juin 2016

python matplotlib anime multi-lines

What is wrong with my code. Thanks in advance; Help please. The code don't do what I want and draw 2 canvas;

from scipy import stats
import numpy as np
import random
import matplotlib.pyplot as plt
import matplotlib.dates as md
from matplotlib import animation
import dateutil
from datetime import datetime, timedelta
import time

X = ['10:00:01', '10:00:02', '10:00:03', '10:00:04', '10:00:05', '10:00:06', '10:00:07', '10:00:08', '10:00:09', '10:00:10', '10:00:11', '10:00:12']
XX = X[11]

DATES = [dateutil.parser.parse(s) for s in X]
Y1 = [90, 60, 45, 34, 56, 66, 71, 24, 46, 12, 64, 45]
Y2 = [45, 70, 25, 84, 96, 26, 41, 28, 76, 52, 34, 55]
Y3 = [40, 82, 46, 87, 03, 49, 78, 24, 65, 48, 97, 46]
Y4 = [21, 54, 75, 35, 75, 67, 24, 74, 95, 34, 30, 48]

plt.figure(figsize=(18,10), dpi=100)
plt.subplot(1, 1, 1)
plt.rc('font', family='serif', size=13)
plt_data = range(0, 100)
plt.subplots_adjust(bottom = 0.0)
plt.xticks(rotation = 35)

ax=plt.gca()
ax.set_xticks(DATES)
xfmt = md.DateFormatter('%H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.gcf().autofmt_xdate()

plt.plot(DATES, Y1, color="blue", linewidth=2.0, linestyle="-")
plt.plot(DATES, Y2, color="red",  linewidth=2.0, linestyle="-")
plt.plot(DATES, Y3, color="green",  linewidth=2.0, linestyle="-")
plt.plot(DATES, Y4, color="cyan",  linewidth=2.0, linestyle="-")

plt.xlabel('$Delta t$ $(s)$', fontsize=20)
plt.ylabel('$Delta p$ $(hPa)$', fontsize=20)
plt.autoscale(enable = True, axis = u'both', tight = False)
plt.grid(True)
plt.show()
fig = plt.figure()

def animate(args):
    global XX
    global Y1
    global y2
    global y3
    global y4
    global X
    global DATES

    Y1.append(int(random.random() * 100))
    Y2.append(int(random.random() * 100))
    Y3.append(int(random.random() * 100))
    Y4.append(int(random.random() * 100))
    del Y1[0]
    del Y2[0]
    del Y3[0]
    del Y4[0]

    TOP_DT1 = datetime.strptime(XX, '%H:%M:%S')
    TOP_DT1 = TOP_DT1 + timedelta(seconds=1)
    XX = TOP_DT1.strftime('%H:%M:%S')
    X.append(XX)
    del X[0]
    print Y1, Y2, Y3, Y4, X

    lines = []
    lines.append(plt.plot(DATES, Y1, color="blue", linewidth=2.0, linestyle="-"),)
    lines.append(plt.plot(DATES, Y2, color="red", linewidth=2.0, linestyle="-"),)
    lines.append(plt.plot(DATES, Y3, color="green", linewidth=2.0, linestyle="-"),)
    lines.append(plt.plot(DATES, Y4, color="cyan",  linewidth=2.0, linestyle="-"),)

    fig.canvas.draw()
    plt.pause(0.0001)

    return lines

ani = animation.FuncAnimation(fig, animate, frames=2000, interval=1, blit=True)
plt.show()

Error output AttributeError: 'list' object has no attribute 'set_animated' [45, 34, 56, 66, 71, 24, 46, 12, 64, 45, 90, 6] [25, 84, 96, 26, 41, 28, 76, 52, 34, 55, 22, 50] [46, 87, 3, 49, 78, 24, 65, 48, 97, 46, 3, 4] [75, 35, 75, 67, 24, 74, 95, 34, 30, 48, 10, 64] ['10:00:03', '10:00:04', '10:00:05', '10:00:06', '10:00:07', '10:00:08', '10:00:09', '10:00:10', '10:00:11', '10:00:12', '10:00:13', '10:00:14'] Exception in Tkinter callback Traceback (most recent call last): File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1540, in call return self.func(*args) File "/usr/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 282, in resize self.resize_event() File "/usr/lib/python2.7/dist-packages/matplotlib/backend_bases.py", line 1819, in resize_event self.callbacks.process(s, event) File "/usr/lib/python2.7/dist-packages/matplotlib/cbook.py", line 563, in process proxy(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/matplotlib/cbook.py", line 430, in call return mtd(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/matplotlib/animation.py", line 917, in _handle_resize self._init_draw() File "/usr/lib/python2.7/dist-packages/matplotlib/animation.py", line 1193, in _init_draw self._draw_frame(next(self.new_frame_seq())) File "/usr/lib/python2.7/dist-packages/matplotlib/animation.py", line 1215, in _draw_frame a.set_animated(self._blit) AttributeError: 'list' object has no attribute 'set_animated'

Aucun commentaire:

Enregistrer un commentaire