如何使用Python动画散点图随着时间的推移

时间:2017-06-17 23:03:44

标签: python matplotlib motion

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

以上是一个包含10个时间段的数据表。每次都有5个指标。如何使用Python制作动画分散(气泡)图表(10个时间段)?

请注意,x轴是固定的list = [1, 2, 3, 4, 5],y轴是5个元素的列表,即time 1, y=[1, 2, 3, 1, 2]; time 2, y=[1, 3, 3, 1, 2]

1 个答案:

答案 0 :(得分:1)

您的代码中存在很多错误,我无法将它们全部列出。但以下工作。

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()