R语言实现两个数值向量的相邻并排式分组直方图绘制
并排分组直方图实现方案
步骤1:加载依赖包
- 若未安装依赖包,先执行安装代码:
install.packages(c("reshape2", "ggplot2")) - 加载包:
library(reshape2) library(ggplot2)
步骤2:处理原始labelled类向量
注意:labelled类数值向量需先转换为普通numeric类型,避免ggplot绘图识别异常
# 转换labelled类为普通数值 A_num <- as.numeric(A) B_num <- as.numeric(B) # 合并为宽格式数据框,列名对应图例分组 raw_df <- data.frame( tax = A_num, truth = B_num )
步骤3:长宽格式转换(匹配参考方案逻辑)
使用reshape2包的melt函数将宽格式转为长格式,适配ggplot映射规则:
melt_df <- melt(raw_df, variable.name = "group", # 分组列对应tax/truth类别 value.name = "personal_norm") # 数值列对应x轴取值
步骤4:绘制并排分组直方图
核心通过geom_bar(position = "dodge")实现相邻分离的条形效果,参数完全匹配你原有基础直方图的样式:
ggplot(melt_df, aes(x = as.factor(personal_norm), fill = group)) + # 核心参数position = "dodge"实现条形并排排列 geom_bar(stat = "count", position = "dodge", color = "white") + # 匹配原有基础直方图的配色:tax为蓝色、truth为红色 scale_fill_manual(values = c("tax" = rgb(0,0,1,0.7), "truth" = rgb(1,0,0,0.7)), labels = c("tax", "truth")) + # 统一x轴范围和标签,和原有hist效果一致 scale_x_discrete(name = "Personal Norm", limits = as.character(1:9)) + labs(title = "Distribution of the Personal Norm") + # 优化主题样式 theme_bw()
可选调整:连续分箱模式
若需要完全匹配基础hist(breaks=9)的连续型分箱逻辑,而非整数分类刻度,可将绘图代码替换为:
ggplot(melt_df, aes(x = personal_norm, fill = group)) + geom_histogram(position = "dodge", bins = 9, color = "white") + scale_fill_manual(values = c("tax" = rgb(0,0,1,0.7), "truth" = rgb(1,0,0,0.7)), labels = c("tax", "truth")) + scale_x_continuous(name = "Personal Norm", limits = c(1,9)) + labs(title = "Distribution of the Personal Norm") + theme_bw()
内容的提问来源于stack exchange,提问作者Tom。
相关产品推荐
相关产品推荐

