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

在R中基于频率表在单个绘图中创建4个是非条形图

问题需求

我有一个数据集,包含4个分类变量:

  • 受访者年少时是否享有免费校餐(FSM)
  • 受访者父母是否上过大学
  • 受访者在校期间是否学习过A-level戏剧
  • 受访者的学校是否开设A-level戏剧

各变量取值为"yes"、"no"或"not applicable"。需要把这4个变量的是非条形图整合到一张图里(可保存为.png),每个子图只保留yes和no的条形。

我已经能生成单个变量(以FSM为例)的频率表和条形图,但不知道怎么合并多图:

# 单个变量频率表
FSM_df <- champions %>% count(FSM, sort = TRUE) %>% mutate(pct = prop.table(n))
percentage = label_percent()(FSM_df$pct)
FSM_df$percentage = percentage

# 单个变量条形图
ggplot(FSM_df, aes(x = FSM, y = n, fill = "#fe8080")) + 
  geom_bar(stat = "identity", show.legend = FALSE) + 
  coord_flip() + 
  labs(x = "FSM", y = "Number of Champions") + 
  geom_text(aes(label = percentage), color = "#662483")
解决方案

1. 转换数据为长格式

先把宽格式数据集转成长格式,同时过滤掉not applicable的取值,方便批量处理所有变量:

library(tidyverse)
library(scales)

# 选择目标变量并转长格式,可根据实际需求修改变量名称
long_df <- champions %>%
  select(
    "年少时享有免费校餐" = FSM,
    "父母上过大学",
    "在校学习过A-level戏剧",
    "学校开设A-level戏剧"
  ) %>%
  pivot_longer(cols = everything(), names_to = "变量名称", values_to = "取值") %>%
  filter(取值 %in% c("yes", "no"))

2. 批量计算频数与百分比

按每个变量分组,统一计算频数和百分比:

summary_df <- long_df %>%
  group_by(变量名称, 取值) %>%
  summarise(受访者数量 = n(), .groups = "drop") %>%
  group_by(变量名称) %>%
  mutate(
    占比 = prop.table(受访者数量),
    百分比文本 = label_percent(accuracy = 1)(占比) # 保留整数百分比,可调整accuracy参数
  )

3. 绘制合并多图

用facet_wrap实现子图排列,保持统一样式:

ggplot(summary_df, aes(x = 取值, y = 受访者数量, fill = "#fe8080")) +
  geom_bar(stat = "identity", show.legend = FALSE) +
  # 调整文本位置,避免被图表边缘截断
  geom_text(aes(label = 百分比文本), color = "#662483", vjust = 0.5, hjust = -0.1) +
  coord_flip() +
  # 按变量拆分子图,y轴独立适配各变量的频数范围
  facet_wrap(~变量名称, scales = "free_y") +
  labs(x = "", y = "受访者数量") +
  theme_bw() # 可选:更换主题让图表更清爽

4. 保存图片

用ggsave导出为png格式:

ggsave(
  "多变量是非条形图.png",
  plot = last_plot(),
  width = 10,
  height = 8,
  dpi = 300
)

注意事项

  • 若变量的中文名称需要调整,直接修改select语句里的重命名部分即可
  • scales = "free_y"参数让每个子图的y轴范围独立,避免因不同变量频数差异大导致小数据子图显示失真
  • 可根据实际图表效果调整geom_text的vjust和hjust参数,优化百分比文本的显示位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:05:31