如何为散点图对应的标签设置动画

时间:2018-02-07 06:10:41

标签: python list animation

以前提出过如何设置注释动画的问题使用了预定义的等式,注释动画是可重现的。此问题要求在每个时间点找到并返回一个xy坐标,以便在该点上进行注释。

我有一个动画散点图,显示某些主题的XY坐标。

示例数据集如下所示:

Time    Player 1_X  Player 1_Y  Player 2_X  Player 2_Y  Player 3_X  Player 3_Y  Player 4_X
10:39.2 65.7        45.1        -2.2        -5.0        73.7        -3.5        61.9
10:39.3 65.8        45.2        -2.2        -5.0        73.7        -3.3        61.7
10:39.4 65.8        45.2        -2.2        -5.0        73.6        -3.2        61.7
10:39.5 65.8        45.3        -2.2        -5.1        73.6        -3.0        61.5
10:39.6 65.8        45.3        -2.1        -5.1        73.5        -2.9        61.3
10:39.7 65.8        45.4        -2.1        -5.2        73.5        -2.9        61.2
10:39.8 65.7        45.6        -2.2        -5.2        73.4        -2.7        61.1
10:39.9 65.7        45.6        -2.2        -5.2        73.3        -2.5        61.0
10:40.0 65.7        45.9        -2.3        -5.3        73.3        -2.5        60.9
10:40.1 65.7        46.1        -2.3        -5.3        73.3        -2.4        60.7

动画这些XY坐标的代码如下所示。我试图在第一个玩家的动画散点图中添加一个注释,但似乎无法使其正常工作。

我希望每个框架都能显示XY数据点和相应的名称。因此,在每个时间点,玩家1将被标记在玩家1的XY坐标上方。

import csv
import matplotlib.pyplot as plt
import matplotlib.animation as animation

visuals = [[],[],[]]

with open('Wide_Single_timestamp2.csv') as csvfile :
    readCSV = csv.reader(csvfile, delimiter=',')
    n=0
    for row in readCSV :
        if n == 0 :
            n+=1
            continue
        visuals[0].append(list(map(float, row[3::2])))
        visuals[1].append(list(map(float, row[2::2])))

fig, ax = plt.subplots(figsize = (8,8))
plt.grid(False)

scatter = ax.scatter(visuals[0][0], visuals[1][0], c=['blue'], alpha = 0.7, s = 20, edgecolor = 'black', zorder = 1) #Scatter plot
annotation = ax.annotate('Player 1', xy=(visuals[0][0],visuals[1][0]))


def animate(i) : 
    scatter.set_offsets([[[[[visuals[0][0+i][0], visuals[1][0+i][0]], [visuals[0][0+i][1], visuals[1][0+i][1]], [visuals[0][0+i][2], visuals[1][0+i][2]], [visuals[0][0+i][3], visuals[1][0+i][3]]]]]])
    annotation.xytext = ([[visuals[0][0+i][0], visuals[1][0+i][0]]])
    annotation.set_data(annotation)


ani = animation.FuncAnimation(fig, animate,
                      interval = 10, blit = False)    

另外,有没有办法来偏移注释,因为如果它确实使用了相应的xy坐标,注释会与散点图重叠,因为注释和散点图将是相同的xy坐标?

0 个答案:

没有答案