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

R语言:重塑数据并绘制2×3分面频数柱状图需求

分面柱状图实现方案

步骤1:数据重塑(宽转长)

原数据是宽格式,三个目标变量各占一列,需要转为长格式才能适配ggplot的分面逻辑。用tidyr包的pivot_longer函数完成转换:

library(tidyr)
library(ggplot2)

# 假设原数据框名为df,区分村庄的列名为Village
df_long <- df %>%
  pivot_longer(
    # 指定要转换的三个变量列
    cols = c(Poor_health, Family_breakdown, Level_of_income),
    # 新列存储原变量名称
    names_to = "Variable",
    # 新列存储对应变量的1-5评分值
    values_to = "Score"
  ) %>%
  # 可选:将Score转为因子,确保x轴严格按1-5顺序排列
  mutate(Score = factor(Score, levels = 1:5))

步骤2:绘制2×3分面柱状图

用ggplot2绘制分面图,通过facet_grid指定行对应变量、列对应村庄,实现2列(两个村庄)×3行(三个变量)的布局:

ggplot(df_long, aes(x = Score)) +
  # 绘制频数柱状图
  geom_bar(fill = "#3498db", alpha = 0.7) +
  # 设置分面网格:行=变量,列=村庄
  facet_grid(rows = vars(Variable), cols = vars(Village)) +
  # 添加标签
  labs(
    x = "评分区间(1-5)",
    y = "频数",
    title = "两村庄各变量评分频数分布"
  ) +
  # 调整主题样式
  theme_light() +
  theme(
    strip.text = element_text(face = "bold"),
    plot.title = element_text(hjust = 0.5, margin = margin(b = 10))
  )

关键注意点

  • 需确保原数据中存在Village列,且该列的取值严格为TenaTeke和Mandugo两个类别,否则分面逻辑会出错。
  • 如果Score列存在缺失值,可在重塑后追加drop_na()过滤缺失值,避免绘图时出现异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:10:35