2017-06-17 3 views
0
Time M1 M2 M3 M4 M5 
1  1 2 3 1 2 
2  1 3 3 1 2 
3  1 3 2 1 3 
4  2 2 3 1 2 
5  3 3 3 1 3 
6  2 3 4 1 4 
7  2 3 4 3 3 
8  3 4 4 3 4 
9  4 4 5 3 3 
10  4 4 5 5 4 

Ci-dessus est un tableau de données avec 10 périodes de temps. Pour chaque fois, il y a 5 mesures. Comment faire un diagramme de dispersion animé (bulle) au fil du temps (10 périodes de temps) en utilisant Python?Comment animer un diagramme de dispersion au fil du temps en utilisant Python

Veuillez noter que l'axe x est fixe list = [1, 2, 3, 4, 5] et l'axe y est la liste de 5 éléments, à savoir time 1, y=[1, 2, 3, 1, 2]; time 2, y=[1, 3, 3, 1, 2].

+0

Quel est exactement le problème? Il y a suffisamment d'exemples montrant comment animer un graphique. Si vous rencontrez un problème spécifique lors de la mise en œuvre de l'une des solutions que vous trouvez, vous pouvez afficher le code, ajouter une description claire du problème et proposer la réouverture de la question. En attendant, vous pouvez lire [ask] et [mcve]. – ImportanceOfBeingErnest

+0

où est la question et la réponse à laquelle vous faites référence? @ ImportanceOfBeingErnest – user7246029

Répondre

1

Il y a tellement d'erreurs dans votre code, je ne peux pas tous les énumérer. Mais les travaux suivants.

import matplotlib.pyplot as plt 
from matplotlib import animation as animation 
import numpy as np 
import pandas as pd 
import io 

u = u"""Time M1 M2 M3 M4 M5 
1  1 2 3 1 2 
2  1 3 3 1 2 
3  1 3 2 1 3 
4  2 2 3 1 2 
5  3 3 3 1 3 
6  2 3 4 1 4 
7  2 3 4 3 3 
8  3 4 4 3 4 
9  4 4 5 3 3 
10  4 4 5 5 4""" 

df_Bubble = pd.read_csv(io.StringIO(u), delim_whitespace=True) 

time_count = len(df_Bubble) 
colors = np.arange(1, 6) 
x = np.arange(1, 6) 
max_radius = 25 
fig, ax = plt.subplots() 
pic = ax.scatter(x, df_Bubble.iloc[0, 1:], s=100, c=colors) 
pic.set_offsets([[np.nan]*len(colors)]*2) 
ax.axis([0,7,0,7]) 

def init(): 
    pic.set_offsets([[np.nan]*len(colors)]*2) 
    return pic, 

def updateData(i): 
    y = df_Bubble.iloc[i, 1:] 
    area = np.pi * (max_radius * y/10.0) ** 2 
    pic.set_offsets([x, y.values]) 
    pic._sizes = area 
    i+=1 
    return pic, 

ani = animation.FuncAnimation(fig, updateData, frames=10, interval = 50, blit=True, init_func=init) 

plt.show() 
+0

et si je ne veux pas utiliser pic.set_offsets, je veux juste mettre à jour les données de l'axe y pour chaque période de temps. Aussi, Comment montrer dans l'intrigue de la période de temps? Je veux une fonction similaire à https://www.youtube.com/watch?v=JkpbY08swyA – user7246029

+0

'pic.set_offsets' met à jour les données. Vous ne pouvez pas mettre à jour les données y uniquement pour un nuage de points. "Comment montrer dans l'intrigue de la période de temps?" n'est pas compréhensible. Le code pour le graphique dans la vidéo peut être trouvé dans le lien ci-dessous la vidéo. – ImportanceOfBeingErnest

+0

Dans la fonction def updateData (i), comment puis-je ajouter une étiquette de temps (chaîne/texte) dans le coin supérieur gauche du tracé, et au fur et à mesure que le temps change (de 1 à 10)? Heure: 1 "," Heure: 2 ", ....." Heure: 10 "? Merci beaucoup. Je suis nouveau à la visualisation en utilisant Python. – user7246029