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

如何制作百分比堆积条形图展示不同DataFrame中足球统计数据的比例关系?

解决方案:制作足球统计指标的百分比堆积条形图

数据整理步骤

首先需要将两个宽格式的DataFrame转换为适合ggplot绘图的长格式,并计算对应分组的百分比。这里分两种匹配你需求的场景处理:


场景1:按主客场分组,展示每组内各指标的占比

x轴为home/away,每个条形内堆积各指标(GS/GC/TP/GD)的百分比:

library(tidyverse)

# 构造原始数据
home <- data.frame(
  HTGS = 35.7923977,
  HTGC = 19.0087719,
  HTP = 1.7241305,
  HTGD = 0.8221233
)

away <- data.frame(
  ATGS = 35.9736842,
  ATGC = 18.9444444,
  ATP = 1.7564932,
  ATGD = 0.8349917
)

# 数据清洗与转换
home_tidy <- home %>%
  mutate(group = "home") %>%
  rename_with(~ str_remove(., "HT")) %>%
  pivot_longer(-group, names_to = "metric", values_to = "value")

away_tidy <- away %>%
  mutate(group = "away") %>%
  rename_with(~ str_remove(., "AT")) %>%
  pivot_longer(-group, names_to = "metric", values_to = "value")

# 合并并计算组内百分比
combined_data <- bind_rows(home_tidy, away_tidy) %>%
  group_by(group) %>%
  mutate(percentage = value / sum(value) * 100) %>%
  ungroup()

# 绘制百分比堆积条形图
ggplot(combined_data, aes(x = group, y = percentage, fill = metric)) +
  geom_col(position = "stack") +
  # 添加百分比标签,居中显示
  geom_text(aes(label = sprintf("%.1f%%", percentage)), 
            position = position_stack(vjust = 0.5), size = 3) +
  labs(
    x = "主/客场",
    y = "百分比",
    title = "主客场各统计指标占比分布",
    fill = "统计指标"
  ) +
  theme_minimal()

场景2:按统计指标分组,展示每个指标内主客场的占比

x轴为各指标(GS/GC/TP/GD),每个条形内堆积home/away的百分比(即你需要的「每个条形展示不同DataFrame的两组数据比例关系」):

只需调整百分比的计算逻辑,按指标分组计算主客场的占比:

# 合并并计算指标内百分比
combined_data_alt <- bind_rows(home_tidy, away_tidy) %>%
  group_by(metric) %>%
  mutate(percentage = value / sum(value) * 100) %>%
  ungroup()

# 绘制图表
ggplot(combined_data_alt, aes(x = metric, y = percentage, fill = group)) +
  geom_col(position = "stack") +
  geom_text(aes(label = sprintf("%.1f%%", percentage)), 
            position = position_stack(vjust = 0.5), size = 3) +
  labs(
    x = "统计指标",
    y = "百分比",
    title = "各统计指标主客场占比分布",
    fill = "主/客场"
  ) +
  theme_minimal()

关键说明

  • 使用pivot_longer将宽格式数据转为长格式是ggplot绘制分组图表的核心前提
  • 通过group_by + mutate计算百分比,可灵活控制按主客场或按指标分组计算比例
  • position = "stack"指定堆积模式,配合position_stack(vjust = 0.5)让标签居中显示

内容的提问来源于stack exchange,提问作者Simon Fox Kuuse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:48:09