本文目录导读:

示例:被射门次数对比(柱状图 + 数据表)
import matplotlib.pyplot as plt
import pandas as pd
# 设置中文字体(Windows 用 SimHei,Mac 用 PingFang SC,Linux 用 WenQuanYi)
plt.rcParams['font.sans-serif'] = ['SimHei', 'PingFang SC', 'Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
# 1. 准备数据:各球队被射门次数(示例数据)
data = {
"球队": ["曼城", "利物浦", "阿森纳", "切尔西", "曼联", "热刺"],
"被射门次数": [95, 110, 102, 140, 155, 130],
"被射正次数": [30, 38, 35, 52, 60, 48],
}
df = pd.DataFrame(data)
# 2. 绘制对比柱状图
fig, ax = plt.subplots(figsize=(10, 6))
x = range(len(df))
width = 0.38
bars1 = ax.bar([i - width/2 for i in x], df["被射门次数"], width,
label="被射门次数", color="#4C72B0")
bars2 = ax.bar([i + width/2 for i in x], df["被射正次数"], width,
label="被射正次数", color="#DD8452")
# 3. 在柱子上标注数值
for bar in bars1:
ax.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 2,
str(int(bar.get_height())), ha='center', fontsize=9)
for bar in bars2:
ax.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 2,
str(int(bar.get_height())), ha='center', fontsize=9)
# 4. 图形装饰
ax.set_xticks(list(x))
ax.set_xticklabels(df["球队"])
ax.set_ylabel("次数")
ax.set_title("各球队被射门次数对比", fontsize=14)
ax.legend()
ax.spines[['top', 'right']].set_visible(False)
ax.set_ylim(0, df["被射门次数"].max() * 1.15)
plt.tight_layout()
plt.show()
# 5. 打印数据表
print(df.sort_values("被射门次数", ascending=False).to_string(index=False))
输出效果
- 双柱状图:每支球队各有“被射门次数”和“被射正次数”两根柱子,直观对比。
- 数值标注:柱子顶部显示具体数字。
- 数据表:按被射门次数降序打印,便于查看排名。
常见扩展方向
| 需求 | 修改方式 |
|---|---|
| 只对比两支球队 | data 中只保留两行 |
| 加“被射门转化率” | df["转化率"] = df["被射正次数"]/df["被射门次数"] |
| 横向条形图 | 把 ax.bar 换成 ax.barh |
| 加联赛平均值参考线 | ax.axhline(df["被射门次数"].mean(), ls="--", color="red") |
| 换成饼图/雷达图 | 用 plt.pie 或 polar |
如果您能把您看到的那个Python案例(代码或截图)贴出来,我可以帮您逐行解读它如何实现“被射门次数对比”,或者帮您排查其中的问题,您也可以告诉我数据来源(如 football-data.org、StatsBomb、自己爬取的数据),我可以帮您适配。
版权声明:本站文章为原创整理,转载请注明出处。