以前提出过如何设置注释动画的问题使用了预定义的等式,注释动画是可重现的。此问题要求在每个时间点找到并返回一个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坐标?