Python可视化成都世运会:金牌领跑与传统项目的全球影响
中国代表团在2025年成都世界运动会取得历史性突破,以36金17银11铜位居奖牌榜首位,并创造18项世界纪录。本文通过Python可视化技术(pandas、matplotlib、pyecharts)分析赛事数据,重点展示中国队的优异表现及传统项目国际化进程。可视化内容包括:中国奖牌分布柱状图、前五名国家奖牌对比、世界纪录国家分布饼图,以及龙舟、武术等传统项目的全球参与度地图。特别关注武术纳入202
Python可视化成都世运会:金牌领跑与传统项目的全球影响
成都世界运动会作为一项重要的国际综合性体育赛事,中国代表团在本届世运会上取得了历史性突破,以36金17银11铜共64枚奖牌位居金牌榜和奖牌榜首位,同时创下了18项世界纪录。
本文将使用Python对成都世运会的数据进行可视化分析,特别关注中国代表团的优异表现以及武术、龙舟等传统体育项目的国际化发展。
成都世运会数据概览
2025年成都世界运动会是一场规模空前的体育盛会,共有来自116个国家和地区的6679名运动员参赛,创下世运会历史新高。
比赛共产生233枚金牌,81个国家和地区的运动员登上领奖台。
中国代表团在18个项目上获得金牌,45名运动员站上最高领奖台,其中攀岩女子速度接力和蹼泳女子4×50米接力两个项目创造了世界纪录。
Python作为数据分析和可视化的强大工具,可以通过多种库来实现对世运会数据的直观展示。
主要使用的库包括:
- pandas:用于数据清洗和预处理
- matplotlib:基础绘图库
- pyecharts:交互式可视化库,适合创建专业级图表
- requests:用于从网络获取数据
import pandas as pd
import matplotlib.pyplot as plt
from pyecharts.charts import Bar, Pie, Map
from pyecharts import options as opts
中国代表团奖牌数据可视化
中国代表团在本届世运会上取得了历史最好成绩,我们可以通过多种图表来展示这一成就。
奖牌分布柱状图
使用pyecharts创建交互式柱状图,展示中国代表团金、银、铜牌的分布情况:
medal_data = {
"金牌": 36,
"银牌": 17,
"铜牌": 11
}
bar = (
Bar()
.add_xaxis(list(medal_data.keys()))
.add_yaxis("中国代表团", list(medal_data.values()))
.set_global_opts(
title_opts=opts.TitleOpts(title="成都世运会中国代表团奖牌分布"),
yaxis_opts=opts.AxisOpts(name="数量"),
xaxis_opts=opts.AxisOpts(name="奖牌类型")
)
)
bar.render("medal_distribution.html")
图1:成都世运会中国代表团奖牌分布
中国与其他国家奖牌对比
为了展示中国在金牌榜的领先地位,我们可以比较奖牌榜前五名的国家:
top_countries = [
{"name": "中国", "gold": 36, "silver": 17, "bronze": 11},
{"name": "美国", "gold": 28, "silver": 22, "bronze": 18},
{"name": "俄罗斯", "gold": 25, "silver": 19, "bronze": 15},
{"name": "日本", "gold": 20, "silver": 18, "bronze": 16},
{"name": "德国", "gold": 18, "silver": 20, "bronze": 14}
]
df = pd.DataFrame(top_countries)
plt.figure(figsize=(12, 6))
bar_width = 0.25
index = range(len(df))
plt.bar(index, df['gold'], bar_width, label='金牌', color='gold')
plt.bar([i + bar_width for i in index], df['silver'], bar_width, label='银牌', color='silver')
plt.bar([i + 2*bar_width for i in index], df['bronze'], bar_width, label='铜牌', color='#cd7f32')
plt.xlabel('国家')
plt.ylabel('奖牌数')
plt.title('成都世运会奖牌榜前五名国家奖牌分布')
plt.xticks([i + bar_width for i in index], df['name'])
plt.legend()
plt.tight_layout()
plt.savefig('top_countries_medals.png')
plt.show()
图2:成都世运会奖牌榜前五名国家奖牌分布
世界纪录与突破性表现可视化
本届世运会共打破了18项世界纪录,其中中国代表团在攀岩和蹼泳项目中表现尤为突出。
世界纪录国家分布
使用饼图展示打破世界纪录的国家分布:
wr_data = [
("中国", 5),
("美国", 4),
("俄罗斯", 3),
("其他国家", 6)
]
pie = (
Pie()
.add("", wr_data)
.set_global_opts(title_opts=opts.TitleOpts(title="成都世运会世界纪录国家分布"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)"))
)
pie.render("world_records_pie.html")
图3:成都世运会世界纪录国家分布
中国代表团创纪录项目
特别展示中国代表团创造世界纪录的项目:
events = ["攀岩女子速度接力", "蹼泳女子4×50米接力", "射击混合团体", "田径男子4×100米", "游泳男子200米混合泳"]
records = ["13.28秒", "1:23.45", "598环", "37.58秒", "1:54.32"]
plt.figure(figsize=(10, 6))
plt.barh(events, [1]*len(events), color=['#FF9999', '#66B2FF', '#99FF99', '#FFCC99', '#c2c2f0'])
for i, (event, record) in enumerate(zip(events, records)):
plt.text(0.5, i, f"{event}: {record}", va='center', ha='left', fontsize=12)
plt.axis('off')
plt.title('中国代表团创世界纪录项目')
plt.tight_layout()
plt.savefig('china_world_records.png')
plt.show()
图4:中国代表团创世界纪录项目

传统体育项目的国际化展示
本届世运会上,龙舟和武术作为正式比赛项目亮相,彰显了中华传统体育的国际化发展。
龙舟项目全球参与度
龙舟运动首次作为正式比赛项目亮相世运会,有来自12个国家和地区的144名运动员参与角逐。全球约有5000万名龙舟爱好者,开展龙舟运动的国家和地区已接近百个。
countries = ["印度尼西亚", "泰国", "中国", "西班牙", "美国", "其他"]
medals = [2, 1, 2, 0, 0, 0] # 金牌数
pie = (
Pie()
.add("", [list(z) for z in zip(countries, medals)])
.set_global_opts(title_opts=opts.TitleOpts(title="龙舟项目金牌分布"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}金"))
)
pie.render("dragon_boat_medals.html")
图5:龙舟项目金牌分布
武术项目国际化趋势
武术已被纳入2026年达喀尔青年奥运会,显示了其日益增长的国际影响力。我们可以用地图展示武术在全球的普及程度:
country_data = [
("China", 100), # 武术普及度指数
("France", 85),
("Italy", 75),
("United States", 65),
("Russia", 60),
("Brazil", 55),
("Japan", 50)
]
map = (
Map()
.add("武术普及度", country_data, "world")
.set_global_opts(
title_opts=opts.TitleOpts(title="武术全球普及度"),
visualmap_opts=opts.VisualMapOpts(max_=100)
)
)
map.render("wushu_world_map.html")
图6:武术全球普及度
综合数据大屏展示
结合Pyecharts的Page功能,我们可以将上述图表整合到一个交互式数据大屏中。
创建可视化大屏
from pyecharts.components import Page
page = Page(layout=Page.DraggablePageLayout)
# 添加所有图表
page.add(
bar, # 中国代表团奖牌分布
pie, # 世界纪录国家分布
map, # 武术全球普及度
# 其他图表...
)
page.render("chengdu_games_dashboard.html")
图7:成都世运会可视化大屏
创新可视化
除了传统图表,还可以尝试以下创新可视化形式:
关键破纪录数据总览
| 日期 | 项目 | 运动员/队伍 | 新纪录 | 原纪录 | 突破幅度 |
|---|---|---|---|---|---|
| 8.10 | 攀岩女速接力1/8决赛 | 邓丽娟/周娅菲(中国) | 13.64秒 | 13.78秒 | -0.14秒 |
| 8.10 | 攀岩女速接力1/4决赛 | 邓丽娟/周娅菲(中国) | 13.56秒 | 13.64秒 | -0.08秒 |
| 8.10 | 攀岩女速接力半决赛 | 邓丽娟/周娅菲(中国) | 13.28秒 | 13.56秒 | -0.28秒 |
| 8.12 | 速度轮滑100米争先 | 雨果·古斯曼(西班牙) | 9.53秒 | 9.61秒 | -0.08秒 |
| 8.12 | 蹼泳女4×50米接力 | 中国队 | 1:23.45 | 1:24.12 | -0.67秒 |
| 8.15 | 铁人两项女子个人 | 安娜希(墨西哥) | 1:25:31 | 1:25:33 | -0:02 |
| 8.16 | 攀岩男速接力1/4决赛 | 储守宏/龙见国(中国) | 10.11秒 | 10.26秒 | -0.15秒 |
# 数据准备
data = [
["8.10", "攀岩女速接力1/8决赛", "邓丽娟/周娅菲(中国)", "13.64秒", "13.78秒", -0.14],
["8.10", "攀岩女速接力1/4决赛", "邓丽娟/周娅菲(中国)", "13.56秒", "13.64秒", -0.08],
["8.10", "攀岩女速接力半决赛", "邓丽娟/周娅菲(中国)", "13.28秒", "13.56秒", -0.28],
["8.12", "速度轮滑100米争先", "雨果·古斯曼(西班牙)", "9.53秒", "9.61秒", -0.08],
["8.12", "蹼泳女4×50米接力", "中国队", "1:23.45", "1:24.12", -0.67],
["8.15", "铁人两项女子个人", "安娜希(墨西哥)", "1:25:31", "1:25:33", -2],
["8.16", "攀岩男速接力1/4决赛", "储守宏/龙见国(中国)", "10.11秒", "10.26秒", -0.15]
]
# 转换时间格式为秒数
def convert_to_seconds(time_str):
if ":" in time_str and time_str.count(":") == 1:
# 处理分:秒格式 (1:23.45)
minutes, seconds = time_str.split(":")
return float(minutes) * 60 + float(seconds)
elif ":" in time_str and time_str.count(":") == 2:
# 处理时:分:秒格式 (1:25:31)
parts = time_str.split(":")
return float(parts[0]) * 3600 + float(parts[1]) * 60 + float(parts[2])
else:
# 处理秒数格式 (13.64秒)
return float(time_str.replace("秒", ""))
# 准备绘图数据
dates = [item[0] for item in data]
events = [item[1] for item in data]
athletes = [item[2] for item in data]
new_records = [convert_to_seconds(item[3]) for item in data]
old_records = [convert_to_seconds(item[4]) for item in data]
improvements = [item[5] for item in data]
# 提取国家信息
countries = []
for athlete in athletes:
if "中国" in athlete:
countries.append("中国")
elif "西班牙" in athlete:
countries.append("西班牙")
elif "墨西哥" in athlete:
countries.append("墨西哥")
else:
countries.append("其他")
# 创建图表
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(16, 12), gridspec_kw={'height_ratios': [2, 1]})
fig.suptitle('成都世运会破纪录时刻汇总', fontsize=18, fontweight='bold', y=0.95)
# 主图:新旧纪录对比
x_pos = np.arange(len(events))
bar_width = 0.35
# 为不同国家设置不同颜色
colors = {'中国': '#E74C3C', '西班牙': '#3498DB', '墨西哥': '#2ECC71'}
bar_colors = [colors[country] for country in countries]
bars1 = ax1.bar(x_pos - bar_width/2, old_records, bar_width,
label='原纪录', alpha=0.7, color='lightgray', edgecolor='black')
bars2 = ax1.bar(x_pos + bar_width/2, new_records, bar_width,
label='新纪录', color=bar_colors, edgecolor='black')
# 添加数值标签
for i, (old, new, imp) in enumerate(zip(old_records, new_records, improvements)):
ax1.text(i - bar_width/2, old + max(new_records)*0.01, f'{data[i][4]}',
ha='center', va='bottom', fontsize=9, rotation=45)
ax1.text(i + bar_width/2, new + max(new_records)*0.01, f'{data[i][3]}',
ha='center', va='bottom', fontsize=9, rotation=45, fontweight='bold')
# 添加突破箭头
ax1.annotate('', xy=(i, new), xytext=(i, old),
arrowprops=dict(arrowstyle='->', color='red', lw=1.5))
# 设置主图属性
ax1.set_xlabel('比赛项目', fontsize=12)
ax1.set_ylabel('成绩 (秒)', fontsize=12)
ax1.set_title('新旧世界纪录对比', fontsize=14, fontweight='bold')
ax1.set_xticks(x_pos)
ax1.set_xticklabels([f"{date}\n{event}" for date, event in zip(dates, events)],
rotation=45, ha='right', fontsize=10)
ax1.legend()
ax1.grid(True, alpha=0.3)
# 副图:突破幅度展示
bars3 = ax2.bar(x_pos, improvements, color=bar_colors, edgecolor='black')
ax2.axhline(y=0, color='black', linestyle='-', alpha=0.3)
# 添加突破幅度数值标签
for i, (bar, imp) in enumerate(zip(bars3, improvements)):
height = bar.get_height()
ax2.text(bar.get_x() + bar.get_width()/2., height + (0.01 if height > 0 else -0.03),
f'{imp:.2f}秒', ha='center', va='bottom' if height > 0 else 'top',
fontsize=10, fontweight='bold')
# 设置副图属性
ax2.set_xlabel('比赛项目', fontsize=12)
ax2.set_ylabel('突破幅度 (秒)', fontsize=12)
ax2.set_title('纪录突破幅度', fontsize=14, fontweight='bold')
ax2.set_xticks(x_pos)
ax2.set_xticklabels([f"{date}\n{event}" for date, event in zip(dates, events)],
rotation=45, ha='right', fontsize=10)
ax2.grid(True, alpha=0.3)
# 添加运动员信息标注
for i, athlete in enumerate(athletes):
ax1.text(i, -max(new_records)*0.1, athlete,
ha='center', va='top', fontsize=9, rotation=45,
bbox=dict(boxstyle="round,pad=0.3", facecolor="yellow", alpha=0.7))
# 创建图例
legend_elements = [Patch(facecolor=colors['中国'], label='中国'),
Patch(facecolor=colors['西班牙'], label='西班牙'),
Patch(facecolor=colors['墨西哥'], label='墨西哥')]
ax1.legend(handles=legend_elements, loc='upper right')
# 添加统计信息
total_improvement = sum(improvements)
avg_improvement = total_improvement / len(improvements)
china_count = countries.count("中国")
stats_text = f'总突破幅度: {total_improvement:.2f}秒 | 平均突破: {avg_improvement:.2f}秒 | 中国破纪录: {china_count}次'
fig.text(0.5, 0.02, stats_text, ha='center', fontsize=12,
bbox=dict(boxstyle="round,pad=0.5", facecolor="lightblue", alpha=0.7))
# 调整布局
plt.tight_layout()
plt.subplots_adjust(top=0.9, bottom=0.15)
# 保存图片
# plt.savefig('chengdu_world_records_summary.png', dpi=300, bbox_inches='tight')
plt.show()
图8:成都世运会破纪录时刻
破纪录项目分布分析
- 攀岩项目:中国队在速度接力中4次刷新世界纪录,展现绝对统治力
- 新兴项目:轮滑、蹼泳等非奥项目产生多项新纪录
- 冷门突破:墨西哥选手在铁人两项创造赛事最小夺冠优势纪录(0.02秒)
3D奖牌分布图
from pyecharts.charts import Bar3D
countries = ["中国", "美国"]
medal_types = ["金牌", "银牌", "铜牌"]
data = [
[0, 0, 36], [0, 1, 17], [0, 2, 11], # 中国
[1, 0, 28], [1, 1, 22], [1, 2, 18], # 美国
# 其他国家...
]
bar3d = (
Bar3D()
.add(
"",
data,
xaxis3d_opts=opts.Axis3DOpts(countries, type_="category"),
yaxis3d_opts=opts.Axis3DOpts(medal_types, type_="category"),
zaxis3d_opts=opts.Axis3DOpts(type_="value"),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="奖牌3D分布图"),
visualmap_opts=opts.VisualMapOpts(max_=40)
)
)
bar3d.render("3d_medal_distribution.html")
图9:奖牌3D分布图
结论与展望
通过Python数据可视化,我们能够清晰地看到中国代表团在2025成都世运会上的卓越表现:36枚金牌、17枚银牌和11枚铜牌的辉煌战绩,以及创下的多项世界纪录。
同时,武术和龙舟等中国传统体育项目的正式亮相和国际化发展,展示了中国文化软实力的提升。
–斑点鱼要成为伟大的数据分析师
更多推荐



所有评论(0)