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
相关产品推荐
相关产品推荐

