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

如何使用ggplot绘制多列数据条形图并展示每列总和标签

ggplot绘制游戏总得分条形图方案

前置依赖

首先需要加载tidyverse套件,包含绘图所需的ggplot2和数据处理工具,未安装可先执行install.packages("tidyverse")。


方法1:先汇总数据再绘图(逻辑清晰,适合新手)

步骤1:构造示例数据

df = data.frame(
  player = c("player 1", "player 2", "player 3"),
  `game 1` = c(1,2,3),
  `game 2` = c(5,6,7),
  `game 3` = c(8,9,10),
  check.names = FALSE
)

步骤2:宽表转长表并计算每局总得分

ggplot默认仅支持长格式数据绘图,需要先把多局游戏的得分列合并:

library(tidyverse)

# 宽表转长表
df_long <- df %>% 
  pivot_longer(cols = -player, names_to = "game", values_to = "score")

# 按游戏分组计算总得分
df_sum <- df_long %>% 
  group_by(game) %>% 
  summarise(total_score = sum(score))

步骤3:绘图加标签

ggplot(df_sum, aes(x = game, y = total_score)) +
  geom_col(fill = "steelblue") + # 生成条形图,直接用汇总好的总得分作为高度
  geom_text(aes(label = total_score), vjust = -0.5, size = 4) + # 条形上方加数值标签
  labs(x = "游戏场次", y = "所有玩家总得分") +
  theme_minimal()

方法2:绘图时自动汇总(代码更简洁)

不需要提前计算总和,直接用stat_summary在绘图阶段自动计算汇总值:

library(tidyverse)

# 直接使用转好的长表df_long绘图
ggplot(df_long, aes(x = game, y = score)) +
  stat_summary(fun = sum, geom = "col", fill = "steelblue") + # 自动计算每局总和生成条形
  stat_summary(fun = sum, geom = "text", aes(label = after_stat(y)), vjust = -0.5, size =4) + # 自动读取总和加标签
  labs(x = "游戏场次", y = "所有玩家总得分") +
  theme_minimal()

常见参数调整说明

  • 标签位置:调整vjust参数即可,数值越大标签越靠上,设为1~2之间标签会显示在条形内部
  • 条形颜色:修改geom_col的fill参数即可,支持颜色名和十六进制色值
  • 坐标轴标题:修改labs内的x、y值即可自定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:27:03