You need to enable JavaScript to run this app. R语言实现两个数值向量的相邻并排式分组直方图绘制
优惠活动
大模型
产品
解决方案
定价
更多

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。

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 04:24:04