使用R绘制柱状图对比单类别与全数据集的频率分布
嘿,我来帮你搞定这个对比柱状图的需求!你已经有了模拟数据的雏形,咱们先把数据补完整,然后一步步实现「特定水果vs整体数据集」的食用频率对比可视化。
1. 补全并加载模拟数据
首先把你给出的不完整数据补全,确保每种水果的频率区间都有覆盖:
# 构建完整的模拟数据(也可以替换成你手里的真实样本) fruit_data <- data.frame( ID = 1:12, Fruit = c(rep("apple",6), rep("orange",4), rep("banana",2)), frequency = c("1-2次", "3-4次", "1-2次", "3-4次", "1-2次", ">4次", "3-4次", "3-4次", "1-2次", ">4次", "3-4次", "1-2次") )
2. 计算频率分布比例
接下来要分别算出整个数据集和**目标水果(比如苹果)**的频率占比,对比占比比单纯看计数更直观:
library(dplyr) # 计算整体数据集的频率分布 overall_freq <- fruit_data %>% count(frequency) %>% mutate(prop = n / sum(n), group = "整体数据集") # 计算特定水果(这里选苹果)的频率分布 target_fruit_freq <- fruit_data %>% filter(Fruit == "apple") %>% count(frequency) %>% mutate(prop = n / sum(n), group = "苹果") # 合并两个数据集用于绘图 plot_data <- bind_rows(overall_freq, target_fruit_freq)
3. 绘制对比柱状图
用ggplot2绘制并排柱状图,清晰展示两者的分布差异:
library(ggplot2) ggplot(plot_data, aes(x = frequency, y = prop, fill = group)) + geom_col(position = position_dodge(width = 0.8), width = 0.7) + # 在柱子上方添加百分比标签 geom_text(aes(label = scales::percent(prop)), position = position_dodge(width = 0.8), vjust = -0.5, size = 3.5) + # 设置图表标题和坐标轴标签 labs(title = "苹果食用频率 vs 整体水果食用频率分布", x = "食用频率区间", y = "占比", fill = "分组") + # 调整主题让图表更美观 theme_minimal() + theme(plot.title = element_text(hjust = 0.5, face = "bold"))
可选调整小技巧
- 如果想对比计数而非占比,把
y = prop换成y = n,标签也改成n即可; - 替换
filter(Fruit == "apple")里的水果名称,就能切换对比橙子或香蕉; - 用
scale_fill_manual(values = c("#FF9999", "#66B3FF"))可以自定义柱子配色。
内容的提问来源于stack exchange,提问作者NhungNguyen
相关产品推荐
相关产品推荐

