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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:40:26