You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib绘制的年度进球条形图上添加每名球员的均值水平线

实现代码

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('https://raw.githubusercontent.com/verticale3185/FINEL-PROJECT/main/cristiano_vs_messi.csv')

df.date = pd.to_datetime(df.date)
df['year'] = pd.DatetimeIndex(df['date']).year
df['year'].fillna(method = 'ffill', inplace = True)
df['year'] = df['year'].astype(int)

messi_df = df.loc[df.player == 'messi'].reset_index()
ronaldo_df = df.loc[df.player == 'ronaldo']

# 计算两人年度进球序列与年均值
ronaldo_yearly_goals = ronaldo_df.groupby(['year'])['player'].count().astype(int)
messi_yearly_goals = messi_df.groupby(['year'])['player'].count().astype(int)
ronaldo_avg = ronaldo_yearly_goals.mean()
messi_avg = messi_yearly_goals.mean()

plt.suptitle('Goals Per Year For Every Player')
# 绑定同一绘图轴,调整position参数避免条形重叠
ax = ronaldo_yearly_goals.plot(kind='bar',color='brown',label='Ronaldo',figsize=(15,5),width = 0.4, position=1)
messi_yearly_goals.plot(kind='bar',color='#14D622',label='Messi',figsize=(15,5),width = 0.2, position=0, ax=ax)

# 绘制同色均值参考线,标注数值
plt.axhline(y=ronaldo_avg, color='brown', linestyle='--', label=f'Ronaldo 年均进球: {round(ronaldo_avg,1)}')
plt.axhline(y=messi_avg, color='#14D622', linestyle='--', label=f'Messi 年均进球: {round(messi_avg,1)}')

plt.legend()
plt.show()

关键修改说明

  • 预计算两名球员的年度进球序列和均值,避免重复分组运算
  • 绑定同一绘图轴,调整position参数解决两组条形重叠问题
  • 使用plt.axhline绘制水平参考线,颜色与对应球员条形保持一致,采用虚线样式区分,标签直接展示均值数值
  • 修正原标题拼写错误(将Fvery改为Every)

内容的提问来源于stack exchange,提问作者Or Nir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:27:02