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

如何用ggplot2绘制双变量并列柱状直方图?

嘿,这个需求我太熟啦!要做这种并列彩色柱子的图,核心是先把你的宽格式数据转成长格式——毕竟ggplot2对长格式数据的支持要友好得多。我给你一步步演示具体怎么做:

第一步:加载必要的包

我们需要用tidyr来转换数据格式,当然少不了ggplot2来绘图:

library(ggplot2)
library(tidyr)

第二步:转换数据格式

把原来的Now和Before两个列合并成一个“分组列”和一个“数值列”:

# 宽转长,生成包含Group(分组名)和Value(对应数值)的新数据框
DF_long <- DF %>%
  pivot_longer(cols = c(Now, Before), 
               names_to = "Group",  # 原来的列名作为分组标签
               values_to = "Value") # 原来的数值作为新列的值

第三步:绘制并列柱状图

用geom_bar配合position = "dodge"就能实现并列效果,颜色用分组来区分:

ggplot(DF_long, aes(x = Value, fill = Group)) +
  # position_dodge保证柱子并列,preserve参数避免数据缺失时柱子错位
  geom_bar(position = position_dodge(preserve = "single"), stat = "count") +
  # 添加标题和标签让图更清晰
  labs(title = "Now vs Before 数值分布并列柱状图",
       x = "数值",
       y = "出现频数",
       fill = "分组") +
  # 用简洁的主题美化一下
  theme_minimal()

额外选项:并列直方图

如果你还是想保留直方图的分箱逻辑,只需要把geom_bar换成geom_histogram,指定分箱宽度就行:

ggplot(DF_long, aes(x = Value, fill = Group)) +
  geom_histogram(position = "dodge", binwidth = 1) +
  labs(title = "Now vs Before 数值分布并列直方图",
       x = "数值",
       y = "频数",
       fill = "分组") +
  theme_minimal()

这样出来的图就能很直观地对比Now和Before两个变量的数值分布差异啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:05:49