首页 > 解决方案 > 我想在 for 循环中使用 ggplot2 制作多个绘图,但它无法识别 aes() 中的 Y 变量

问题描述

我有一个名为 TumorData 的数据框,其中列是不同基因的基因表达数据,行是不同的患者。我想要其中一列(名称为 TP53)针对第 3 到 12 列中的每个基因的散点图。我做了以下

for(i in 3:12) {
  GeneName <- colnames(TumorData[, i])
  FileName <- paste0(GeneName, ".png")
  ggplot(TumorData, aes(x = TP53, y = GeneName)) +
    geom_point()
  ggsave(FileName)
}

但是当我转到保存的文件时,它就好像它是一个一维图:只有第一个参数(TP53)被相应地绘制。一切都在同一条水平线上,Y 轴甚至没有数字刻度。该循环确实读取了“GeneName”,因为实际的基因名称出现在每个图表的 Y 轴上,但就像它不“理解”它是数据框中列的名称并且它应该检索数值从那里。我附上了一张图表的外观图片,因为我不确定我是否足够清楚地解释自己。 这就是图表的外观

抱歉,如果这太愚蠢了,我是 R 新手,对循环没有太多经验,更不用说循环和图表了。关于如何纠正这个问题的任何想法?

编辑:我按照 stefan 说的做了,并像这样使用了.data

    for(i in 3:12) {
  GeneName <- colnames(AllPatients[, i])
  FileName <- paste0(GeneName, ".png")
  ggplot(AllPatients, aes(x = TP53, y = .data[[GeneName]])) + 
    geom_point()
  ggsave(FileName)
}

它奏效了,谢谢!

标签: rfor-loopggplot2

解决方案


推荐阅读