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

如何循环遍历DESeq2对象vsd的变量列,批量生成不同分组颜色的bulk RNA-seq数据PCA图?

批量生成按不同变量分组的Bulk RNA-seq PCA图(基于DESeq2的vsd对象)

我最近在处理bulk RNA-seq数据,想用DESeq2的vsd对象批量生成PCA图——要求每个图都用vsd里的不同变量作为颜色分组依据。目前我只能手动写代码生成单个图,代码如下:

pcaData <- plotPCA(vsd, intgroup=c("Age", "BlastRate"), returnData=TRUE)
percentVar <- round(100 * attr(pcaData, "percentVar"))
ggplot(pcaData, aes(PC1, PC2, color=Age, shape=BlastRate)) + 
  geom_point(size=3) + 
  xlab(paste0("PC1: ",percentVar[1],"% variance")) + 
  ylab(paste0("PC2: ",percentVar[2],"% variance")) + 
  geom_text(aes(label=name),hjust=-.2, vjust=0) + 
  ggtitle("Principal Component Analysis")

现在我想找一种循环遍历的方法,把代码里的Age替换成vsd的其他变量列,批量生成对应的PCA图。我的vsd对象的列数据信息如下:

> head(colData(vsd),1)
DataFrame with 1 row and 14 columns
          LibSize LibDiversity PercMapped    Age SpermStatus SpConc SpMot Subject.Group PairedSample FertRate
         <factor>    <factor>   <factor> <factor> <character> <factor> <factor>     <factor>      <factor> <factor>
sRNA_1       Low         High        High   42-46         unk     unk     unk     Male-Male            2      Low
          BlastRate RNABatch LibPrepBatch sizeFactor
           <factor> <factor>    <factor>   <numeric>
sRNA_1        Low        1           6    0.929408

解决方案:循环遍历变量批量生成PCA图

这里提供一个高效的循环方法,同时处理变量过滤、动态绘图和可选的图片保存:

# 1. 提取colData中的变量名,过滤掉数值型列(比如sizeFactor,连续值不适合做分组颜色)
group_vars <- colnames(colData(vsd))[sapply(colData(vsd), function(x) !is.numeric(x))]

# 2. 循环遍历每个变量生成PCA图
for (var in group_vars) {
  # 生成PCA数据
  pcaData <- plotPCA(vsd, intgroup = c(var, "BlastRate"), returnData = TRUE)
  percentVar <- round(100 * attr(pcaData, "percentVar"))
  
  # 绘制PCA图,用.data[[var]]解决ggplot的动态变量引用问题
  p <- ggplot(pcaData, aes(PC1, PC2, color = .data[[var]], shape = BlastRate)) +
    geom_point(size = 3) +
    xlab(paste0("PC1: ", percentVar[1], "% variance")) +
    ylab(paste0("PC2: ", percentVar[2], "% variance")) +
    geom_text(aes(label = name), hjust = -.2, vjust = 0) +
    ggtitle(paste0("Principal Component Analysis - Colored by ", var)) +
    theme_minimal() # 可选:优化图表主题
  
  # 打印当前图
  print(p)
  
  # 可选:将每个图保存为独立文件,文件名包含变量名
  ggsave(
    filename = paste0("PCA_", var, ".png"),
    plot = p,
    width = 8,
    height = 6,
    dpi = 300
  )
}

代码说明

  • 变量过滤:用sapply筛选掉数值型列(比如sizeFactor),避免用连续值做颜色分组(如果需要保留数值型变量,直接去掉过滤步骤,用group_vars <- colnames(colData(vsd))即可)
  • 动态变量引用:使用.data[[var]]来在ggplot中动态调用循环变量,避免ggplot的非标准求值导致的错误
  • 个性化区分:每个图的标题会标注当前分组变量,保存的文件名也包含变量名,方便后续查看
  • 可选保存:ggsave会自动把每个图保存为PNG文件,你可以根据需要调整尺寸、格式(比如PDF)和分辨率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:17:46