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

R语言ggplot2:将柱状图转为百分比并对比数据集的方法问询

解决方案:生成百分比对比柱状图

要解决不同规模数据集的占比对比问题,核心思路是先计算每个数据集内各类别的占比,再通过合并数据实现统一可视化。以下是具体步骤和代码:

1. 数据预处理(合并+计算百分比)

首先将两个数据集合并并添加标识,再用dplyr计算每个类别在对应数据集内的百分比:

# 加载所需包
library(dplyr)
library(ggplot2)

# 合并数据集并添加分组标识
combined_df <- bind_rows(
  df1 %>% mutate(数据集 = "df1") %>% rename(类别 = variable1),
  df2 %>% mutate(数据集 = "df2") %>% rename(类别 = variable2)
)

# 计算每个数据集内各类别的百分比
percent_data <- combined_df %>%
  group_by(数据集, 类别) %>%
  summarise(计数 = n(), .groups = "drop") %>%  # 统计每个类别数量
  group_by(数据集) %>%
  mutate(百分比 = 计数 / sum(计数) * 100)  # 计算占比

2. 可视化方案

方案一:并列对比柱状图(直观对比同一类别在两个数据集的占比)

这种方式适合直接看每个类别在不同数据集的占比差异:

ggplot(percent_data, aes(x = 类别, y = 百分比, fill = 数据集)) +
  geom_col(position = "dodge", width = 0.7) +  # 并列柱子
  labs(title = "A", x = "B", y = "百分比(%)") +
  scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, 20)) +
  theme_minimal()

方案二:堆叠柱状图(展示单个数据集内的类别占比分布)

如果想聚焦每个数据集的内部结构,同时对比整体分布:

ggplot(percent_data, aes(x = 数据集, y = 百分比, fill = 类别)) +
  geom_col() +
  geom_text(aes(label = paste0(round(百分比, 1), "%")), 
            position = position_stack(vjust = 0.5)) +  # 添加百分比标签
  labs(title = "A", x = "数据集", y = "百分比(%)") +
  scale_y_continuous(limits = c(0, 100)) +
  theme_minimal()

关键说明

  • 用bind_rows合并数据是为了避免重复写两次绘图代码,同时方便统一计算百分比;
  • group_by(数据集)确保百分比是基于每个数据集的整体规模计算,解决了两个数据集规模不同的问题;
  • 如果你的variable1和variable2类别名称不一致,需要先统一类别名称再合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:17:06