R ggplot2绘制比例堆叠面积图线条重叠与横轴处理问题求助
代码修正方案
核心问题
你代码中存在变量名混用的错误:相对丰度计算结果保存在S1_RA1中,但后续补全缺失分类单元的complete操作执行在了未正确赋值的Shime1_RA2上,导致不同时间点的物种分类(Taxa)没有对齐,堆叠计算时出现错位、线条重叠的异常。
修正后完整代码
第一步:统一数据预处理流程
library(ggplot2) library(dplyr) library(tidyr) library(RColorBrewer) # 读取数据并计算相对丰度 RA1 <- read.csv("RA1.csv", header=TRUE) S1_RA1 <- RA1 %>% group_by(Timepoint, Taxa) %>% summarise(n = sum(Relative.Abundance)) %>% mutate(percentage = n / sum(n)) %>% ungroup() %>% # 补全所有时间点的全部Taxa,缺失值填充为0,是堆叠面积图正常显示的核心 complete(Timepoint, Taxa, fill = list(n = 0, percentage = 0)) %>% # 可选:去除Taxa字段首尾的空格,避免空格导致同一物种被识别为不同分类 mutate(Taxa = trimws(Taxa)) # 配置配色 nb.cols <- 16 getPalette <- colorRampPalette(brewer.pal(9, 'Set1'))(nb.cols)
第二步:绘制两种横轴类型的图表
1. 横轴为分类变量
ggplot(S1_RA1, aes(x = factor(Timepoint), y = percentage, fill = Taxa, group = Taxa)) + geom_area(position = "fill", colour = "black", linewidth = .5, alpha = .7) + scale_y_continuous(name="Relative Abundance", expand=c(0,0)) + scale_x_discrete(name="Timepoint (d)", expand=c(0,0)) + scale_fill_manual(values = getPalette) + theme(legend.position='bottom')
2. 横轴为数值变量
ggplot(S1_RA1, aes(x = Timepoint, y = percentage, fill = Taxa, group = Taxa)) + geom_area(position = "fill", colour = "black", linewidth = .5, alpha = .7) + scale_y_continuous(name="Relative Abundance", expand=c(0,0)) + scale_x_continuous(name="Timepoint (d)", expand=c(0,0), breaks = unique(S1_RA1$Timepoint)) + scale_fill_manual(values = getPalette) + theme(legend.position='bottom')
补充说明
如果你使用的是3.3.0版本以下的ggplot2,将代码中的linewidth参数改回size即可正常运行。
内容的提问来源于stack exchange,提问作者Coldgrad
相关产品推荐
相关产品推荐

