本文目录导读:

我理解您想了解一个关于“被射门次数对比”的Python案例,这是一个足球数据分析中常见的可视化需求,让我为您提供一个完整的示例:
完整的Python案例:被射门次数对比
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False # 用于显示负号
# 示例数据:不同球队的被射门次数
data = {
'球队': ['曼城', '阿森纳', '利物浦', '切尔西', '曼联', '热刺', '纽卡斯尔', '布莱顿'],
'被射门次数': [95, 102, 110, 125, 118, 130, 142, 138]
}
# 创建DataFrame
df = pd.DataFrame(data)
# 创建图表
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
fig.suptitle('各球队被射门次数对比分析', fontsize=16, fontweight='bold')
# 1. 柱状图
ax1 = axes[0, 0]
bars = ax1.bar(df['球队'], df['被射门次数'], color=['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7', '#DDA0DD', '#98D8C8', '#F7DC6F'])
ax1.set_title('柱状图对比', fontsize=12)
ax1.set_xlabel('球队')
ax1.set_ylabel('被射门次数')
ax1.set_xticklabels(df['球队'], rotation=45, ha='right')
# 添加数值标签
for bar in bars:
height = bar.get_height()
ax1.text(bar.get_x() + bar.get_width()/2., height + 1, f'{int(height)}', ha='center', va='bottom')
# 2. 水平条形图
ax2 = axes[0, 1]
sorted_df = df.sort_values('被射门次数', ascending=True)
y_pos = np.arange(len(sorted_df))
bars2 = ax2.barh(y_pos, sorted_df['被射门次数'], color='steelblue')
ax2.set_yticks(y_pos)
ax2.set_yticklabels(sorted_df['球队'])
ax2.set_title('水平条形图(按从低到高排序)', fontsize=12)
ax2.set_xlabel('被射门次数')
# 添加数值标签
for i, (v, label) in enumerate(zip(sorted_df['被射门次数'], sorted_df['球队'])):
ax2.text(v + 2, i, str(v), va='center', fontsize=10)
# 3. 折线图
ax3 = axes[1, 0]
ax3.plot(df['球队'], df['被射门次数'], 'o-', color='crimson', linewidth=2, markersize=8)
ax3.fill_between(range(len(df)), df['被射门次数'], alpha=0.1, color='crimson')
ax3.set_title('折线趋势图', fontsize=12)
ax3.set_xlabel('球队')
ax3.set_ylabel('被射门次数')
ax3.set_xticklabels(df['球队'], rotation=45, ha='right')
# 添加数据点标签
for x, y in enumerate(df['被射门次数']):
ax3.text(x, y + 2, str(y), ha='center', fontsize=10)
# 4. 饼图(显示比例)
ax4 = axes[1, 1]
colors = plt.cm.Set3(np.linspace(0, 1, len(df)))
wedges, texts, autotexts = ax4.pie(df['被射门次数'], labels=df['球队'], autopct='%1.1f%%',
colors=colors, explode=[0.02]*len(df), shadow=True, startangle=90)
ax4.set_title('所占比例饼图', fontsize=12)
# 添加统计信息
total_shots = df['被射门次数'].sum()
average_shots = df['被射门次数'].mean()
max_shots = df['被射门次数'].max()
min_shots = df['被射门次数'].min()
max_team = df.loc[df['被射门次数'].idxmax(), '球队']
min_team = df.loc[df['被射门次数'].idxmin(), '球队']
# 在底部添加统计摘要
stats_text = (f'总被射门次数: {total_shots} | '
f'平均: {average_shots:.1f} | '
f'最高: {max_shots} ({max_team}) | '
f'最低: {min_shots} ({min_team})')
fig.text(0.5, 0.02, stats_text, ha='center', fontsize=12,
bbox=dict(boxstyle='round', facecolor='lightgray', alpha=0.8))
plt.tight_layout()
plt.subplots_adjust(bottom=0.1) # 为统计文本留出空间
plt.show()
# 输出详细数据
print("\n=== 被射门次数详细数据 ===")
print(df.to_string(index=False))
print(f"\n统计摘要:")
print(f"- 总被射门次数: {total_shots}")
print(f"- 平均每次: {average_shots:.2f}")
print(f"- 最容易被射门: {max_team} ({max_shots}次)")
print(f"- 最不易被射门: {min_team} ({min_shots}次)")
# 计算排名
df['排名'] = df['被射门次数'].rank(method='min', ascending=True).astype(int)
print("\n球队排名(从少到多):")
print(df[['球队', '被射门次数', '排名']].sort_values('排名').to_string(index=False))
关键功能说明:
-
四种可视化类型:
- 柱状图:直观对比各队数据
- 水平条形图:按数值排序展示
- 折线图:显示数据趋势
- 饼图:显示各队占比
-
核心分析功能:
- 自动计算总数、平均值
- 找出最高/最低值球队
- 自动排名
-
图表优化:
- 添加数值标签
- 中文字体支持
- 美观的颜色方案
- 统计摘要显示
运行此代码将生成一个包含四个不同角度可视化的对比图表,非常适合用于足球数据分析报告或比赛复盘。
如果您有特定的球队数据或想调整图表样式,请告诉我,我可以帮您修改代码!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播