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

如何为R语言dataframe按Age_group分组绘制两个变量的并排柱状图

R 实现年龄组双比值指标并排柱状图的简便方案

核心思路是通过宽表转长表适配ggplot2的分组绘图逻辑,无需手动逐个配置列,后续新增同类型比值列也可自动适配。

完整实现代码(tidyverse 方案,推荐)

# 加载依赖包(tidyverse包含数据转换和绘图所需工具)
library(tidyverse)

# 示例数据导入(如果你已经导入数据可跳过这段)
df <- structure(list(Age_group = c("0-1", "16-40", "2-5", "6-15", "Others"), 
                     Ratio_no_V_tour = c(0.144814506265842, 0.368098268252477, 0.135597426307673, 0.291277451831895, 0.0602123473421132), 
                     Ratio_V_tour = c(0.0704375667022412, 0.431100508506498, 0.12103710214075, 0.302278862452131, 0.0751459601983803)), 
                row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"))

# 宽表转长表:自动匹配所有Ratio开头的列作为分组指标
df_long <- df %>% 
  pivot_longer(
    cols = starts_with("Ratio"), # 自动匹配列名以Ratio开头的所有列,无需手动写列名
    names_to = "Tour_type", # 分组类别列名,可自定义
    values_to = "Ratio" # 比值列名,可自定义
  )

# 绘制并排柱状图
ggplot(df_long, aes(x = Age_group, y = Ratio, fill = Tour_type)) +
  geom_col(position = position_dodge(width = 0.9), width = 0.8) + # position_dodge实现并排效果
  scale_x_discrete(limits = c("0-1", "2-5", "6-15", "16-40", "Others")) + # 按年龄顺序调整x轴排序
  labs(x = "年龄组", y = "占比", fill = "游客类型") +
  theme_bw()

方案优势

  • 无需手动逐个配置对比列,通过starts_with语法自动匹配同规则列,新增比值列自动纳入绘图
  • 自动保留原始列名作为图例标签,可自定义修改
  • x轴可直接调整年龄组顺序,符合常规可视化逻辑

可选:Base R 轻量实现方案

如果不想加载第三方包,可直接用base R语法实现:

# 提取比值列转为矩阵
ratio_mat <- as.matrix(df[, c("Ratio_no_V_tour", "Ratio_V_tour")])
# 设置x轴标签
rownames(ratio_mat) <- df$Age_group
# 绘制并排柱状图
barplot(t(ratio_mat), beside = TRUE, col = c("#1f77b4", "#ff7f0e"),
        xlab = "年龄组", ylab = "占比", legend.text = c("非游客", "游客"),
        args.legend = list(x = "topright"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:06:00