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

R ggplot2绘制联赛国家比赛数与黄牌数并列柱状图

R 实现联赛国家维度并列柱状图方案

核心实现逻辑

要完成同x轴分类下两个指标的并列柱形展示,需要先完成数据聚合、格式转换,再匹配ggplot2的分组绘图规则,核心流程如下:

  • 按leagueCountry字段分组,分别计算games、yellowCards的累计总和
  • 将聚合后的宽表转为长表,把两个指标的名称、数值分别存入两列,满足ggplot2的映射要求
  • 绘图时将指标类型映射给填充色fill,搭配position = "dodge"实现同组柱体并列

完整可运行代码

# 加载所需工具包
library(dplyr)
library(tidyr)
library(ggplot2)

# 数据预处理
plot_df <- new_soccer_referee %>%
  # 按联赛国家分组汇总
  group_by(leagueCountry) %>%
  summarise(
    total_games = sum(games, na.rm = TRUE),
    total_yellow = sum(yellowCards, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  # 转换为ggplot适配的长格式
  pivot_longer(
    cols = c(total_games, total_yellow),
    names_to = "metric",
    values_to = "value"
  )

# 绘制并列柱状图
ggplot(plot_df, aes(x = leagueCountry, y = value, fill = metric)) +
  geom_col(
    position = position_dodge(width = 0.8),
    width = 0.7
  ) +
  # 可选:给柱体添加数值标签
  geom_text(
    aes(label = value),
    position = position_dodge(width = 0.8),
    vjust = -0.2,
    size = 3
  ) +
  # 自定义坐标轴和图例文本
  scale_fill_discrete(
    labels = c("累计比赛场次", "累计黄牌数")
  ) +
  labs(
    x = "联赛所属国家",
    y = "累计数值",
    fill = "统计指标",
    title = "各国联赛累计场次与黄牌数对比"
  ) +
  theme_bw()

常见踩坑说明

  • 很多人写geom_col(position="dodge")出问题,核心原因是没有在aes()里给分组维度(这里是指标类型)做映射,ggplot无法识别分组规则,就会出现柱体堆叠、位置错位的问题
  • pivot_longer转换长格式是分组绘图的核心步骤,如果直接在原始宽表上给两个指标分别加geom_col层,会出现柱体重叠、图例无法自动生成的问题
  • position_dodge(width=...)的数值要和geom_col的width参数匹配,一般dodge宽度比柱宽大0.1左右,能保证同组柱体相邻、组间有明显间距
  • 汇总时记得加na.rm=TRUE,避免原始数据存在缺失值导致汇总结果为NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:57:26