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

如何用ggplot将总CD8细胞数拆分为堆叠条形图展示?

用ggplot实现CD8细胞数的堆叠条形图方法

要把总CD8细胞数分解为不同组织类型的堆叠条形图,核心是先把你的宽格式数据集转换成长格式,再用ggplot的填充映射区分不同组织。

步骤1:转换数据格式

你的数据集目前是宽格式(每个ROI一行,列包含tumor_cd8、epi_cd8、stroma_cd8、necro_cd8),需要转成长格式——让每个组织类型的CD8数单独占一行。用tidyverse包的pivot_longer函数就能搞定:

# 加载tidyverse(包含dplyr和ggplot2)
library(tidyverse)

# 假设你的数据集名为df,转换成长格式
df_long <- df %>%
  pivot_longer(
    cols = c(tumor_cd8, epi_cd8, stroma_cd8, necro_cd8), # 指定要转换的列
    names_to = "tissue_type", # 新生成的组织类型列名
    values_to = "cd8_count"   # 新生成的CD8细胞数列名
  )

步骤2:绘制堆叠条形图

用转换后的长格式数据,直接用geom_col()(适合已有汇总值的条形图),把fill参数映射到tissue_type,就能自动生成堆叠效果:

ggplot(df_long, aes(x = roi_id, y = cd8_count, fill = tissue_type)) +
  geom_col() + # 默认就是堆叠模式,position="stack"可省略
  labs(
    x = "ROI编号",
    y = "CD8细胞数",
    fill = "组织类型",
    title = "各ROI内不同组织的CD8细胞数堆叠图"
  ) +
  theme_minimal() # 可选,调整主题样式

额外实用技巧

  • 若total_cd8是四个组织CD8数的总和,堆叠后的条形高度会自动等于total_cd8,无需额外处理。
  • 可用scale_fill_manual()自定义填充颜色:
    scale_fill_manual(values = c(
      "tumor_cd8" = "#E64B35",
      "epi_cd8" = "#4DBBD5",
      "stroma_cd8" = "#00A087",
      "necro_cd8" = "#3C5488"
    ))
    
  • 要在堆叠条上显示具体数值,添加geom_text()即可:
    geom_text(aes(label = cd8_count), position = position_stack(vjust = 0.5))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:47:21