如何将两个数据框的V1变量结果绘制为并排条形图?
这问题我之前处理类似需求时也琢磨过!要把两个不同调查的同变量结果放在同一个图里并排展示,核心思路是先把两个数据框合并,加上一个能区分调查来源的标识列,然后用ggplot来实现可视化,我给你两种常用的方案:
第一步:合并数据并添加分组标识
不管用哪种绘图方式,先把数据整合到一起是关键。我们可以给每个数据框加一个Survey列,标记它来自DF1还是DF2,再合并成一个数据框:
用基础R实现:
# 给DF1添加标识列,只保留绘图需要的列 DF1$Survey <- "Survey 1" DF1 <- DF1[, c("V1", "Survey")] # 给DF2做同样操作 DF2$Survey <- "Survey 2" DF2 <- DF2[, c("V1", "Survey")] # 合并数据框 combined_df <- rbind(DF1, DF2)
用dplyr更简洁实现:
如果你习惯用tidyverse工具,一行就能搞定合并加标识:
library(dplyr) combined_df <- bind_rows(DF1 = DF1, DF2 = DF2, .id = "Survey") # .id参数会自动生成名为Survey的列,值就是你传入的DF1/DF2
第二步:两种可视化方案
方案1:分面子图(并排独立展示)
适合想清晰看到每个调查的整体分布时用,每个调查占一个子图,横向并排:
library(ggplot2) ggplot(combined_df, aes(x = V1)) + geom_bar(fill = "#4285F4") + # 自定义填充色 facet_wrap(~ Survey, ncol = 2) + # 设置为2列并排展示 theme(axis.text.x = element_text(angle = 90, hjust = 1), text = element_text(size = 10)) + labs(x = "选项", y = "人数") # 可根据需求修改标签文字
方案2:同一图内并排柱状图
如果想直接对比每个选项在两个调查中的数量差异,就用这种方式,把两个调查的柱子并排:
ggplot(combined_df, aes(x = V1, fill = Survey)) + geom_bar(position = position_dodge(width = 0.8), alpha = 0.8) + # position_dodge控制柱子并排的间距,alpha调整透明度 theme(axis.text.x = element_text(angle = 90, hjust = 1), text = element_text(size = 10)) + labs(x = "选项", y = "人数", fill = "调查来源")
你可以根据自己的需求选其中一种,两种方法都能完美实现你要的“单个图中并排展示”的效果~
内容的提问来源于stack exchange,提问作者KaC
相关产品推荐
相关产品推荐

