如何在R的ggplot中绘制按采样日期分组的堆叠并排柱状图
解决方案:ggplot绘制按采样日期分组的堆叠并排柱状图
要实现同一监测站位下,不同采样日期的堆叠柱状图并排展示,核心是合并所有样本数据并添加日期标识,再通过ggplot的分组和位置调整参数实现需求。
步骤1:合并数据并添加采样日期标识
首先将三个独立的样本数据集合并到一个数据框中,同时添加一列用于区分采样日期:
# 假设三个数据集分别为 densegroupOct21(2021年10月)、densegroupApr22(2022年4月)、densegroupOct22(2022年10月) densegroupOct21$sample_date <- "2021-10" densegroupApr22$sample_date <- "2022-04" densegroupOct22$sample_date <- "2022-10" # 合并为单一数据框 all_data <- rbind(densegroupOct21, densegroupApr22, densegroupOct22)
步骤2:绘制堆叠并排柱状图
通过设置group = sample_date指定分组依据,配合position_dodge实现同一站位下不同日期的堆叠柱并排:
ggplot(all_data, aes(x = station, y = density, fill = group)) + scale_fill_brewer(palette = "Paired") + # 按采样日期分组,让同一站位下的不同日期堆叠柱并排 geom_bar(stat = "identity", position = position_dodge(width = 0.8), aes(group = sample_date)) + labs(x = "Station", y = "Density", title = "Group Density by Station and Sampling Date") + # 调整x轴标签角度避免重叠 theme(axis.text.x = element_text(angle = 45, hjust = 1))
优化:添加日期边框增强区分度
如果需要更清晰地分辨不同采样日期的堆叠柱,可以添加边框颜色:
ggplot(all_data, aes(x = station, y = density, fill = group)) + scale_fill_brewer(palette = "Paired") + geom_bar(stat = "identity", position = position_dodge(width = 0.8), aes(group = sample_date, color = sample_date), size = 0.5) + # 自定义边框颜色 scale_color_manual(values = c("#2c3e50", "#7f8c8d", "#bdc3c7")) + labs(x = "Station", y = "Density", title = "Group Density by Station and Sampling Date") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
原理说明
- 合并数据是基础:ggplot要求多组数据放在同一数据框中,通过分类变量(这里是
sample_date)实现分组展示。 group = sample_date:告诉ggplot按采样日期对柱子进行分组,确保同一站位下的不同日期柱子独立排列。position_dodge(width = 0.8):控制同一站位下不同日期柱子的横向间距,数值越大间距越宽。
内容的提问来源于stack exchange,提问作者clemycg
相关产品推荐
相关产品推荐

