我有一个包含足球运动员统计数据的数据框,包括 x 轴的值 X、y 轴的 Y 值,然后是球员姓名和“统计数据年份”。我在动画帧中使用了一年的统计数据,但我想在动画过程中专门跟踪一个玩家,以查看他们的统计数据在图中移动。
d = {'player_names': ['player_A','player_A', 'player_B', 'player_B','player_C','player_C'],
'player_stat_x': ['10', '15', '5', '8', '7', '9'],
'player_stat_y':['1', '3', '2', '1', '4', '4'],
'player_year': ['2003', '2004','2003', '2004','2003', '2004']}
df = pd.DataFrame(data=d)
fig = px.scatter(df.sort_values(['player_year']),
x="player_stat_x",
y="player_stat_y",
animation_frame = "player_year",
text = ??
)
我试图从 2003 年到 2004 年跟踪玩家 A,但我不知道如何处理这个问题。将“player_names”列放入文本字段会显示所有名称,这不是我想要的。我只想显示player_A 的名字。我是情节新手,不知道如何获得这种结果,或者是否可能。
您可以做的是使用条件逻辑创建一个“文本”列,该列保留player_A字符串,但将所有其他字符串更改为
''
。这只会给玩家留下一条短信。
此外,您可能希望 x 和 y 的数据框是数字,而不是字符串
import pandas as pd
import plotly.express as px
import plotly.io as pio
pio.renderers.default = 'browser'
d = {'player_names': ['player_A','player_A', 'player_B', 'player_B','player_C','player_C'],
'player_stat_x': [10, 15, 5, 8, 7, 9],
'player_stat_y':[1, 3, 2, 1,4, 4],
'player_year': ['2003', '2004','2003', '2004','2003', '2004']}
df = pd.DataFrame(data=d)
# Add a column to show text only for player_A
df['text'] = df['player_names'].apply(lambda x: x if x == 'player_A' else '')
# Create the scatter plot
fig = px.scatter(df.sort_values(['player_year']),
x="player_stat_x",
y="player_stat_y",
animation_frame="player_year",
text='text'
)
# Show the plot
pio.show(fig)