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

