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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:45:03