【问题标题】:R: Color points in PCA based on groups when using autoplotR:使用自动绘图时基于组的 PCA 中的色点
【发布时间】:2016-09-25 14:55:00
【问题描述】:

我制作了一个 PCA 图,我在其中根据不同基因的表达绘制了许多细胞。在这个情节中,我想用单独的颜色为一些点着色。我试图通过创建“组”来实现这一点,在其中我根据细胞的表达或缺乏“gene1”的表达对细胞进行分类。

这是我的数据框的样子(gene1、gene2 和 cell_1、cell_2 等是 colnames 和 rownames):

          gene1      gene2      gene3      gene4      gene5
cell_1   0.0000   0.279204  25.995400  46.171700  94.234100
cell_2   0.0000  23.456000  77.339800 194.241000 301.234000
cell_3   2.0000  13.100000  45.309200   0.776565   0.000000
cell_4   0.0000  10.500000 107.508000   3.032500   0.000000
cell_5   3.0000   0.000000   0.266139   0.762981 123.371000

这是我用来尝试实现此目的的代码:

library(ggplot2)
library(ggfortify)

# Group cells based on expression of a certain gene (to use for color labels in the next step)
groups <- factor(ifelse(df$gene1 > 0, "Positive", "Others"))

#Calculate PCs and plot PCA
autoplot(prcomp(log(df[]+1)), colour="Positive")

当我运行此代码时,我收到以下错误:

Error in grDevices::col2rgb(colour, TRUE) : invalid color name 'Positive'

【问题讨论】:

  • 您应该使用组变量,而不是组变量中的特定标签。
  • @Pieter 谢谢。我应该提到 - 我尝试使用“组”和“其他”也有同样的错误。 (grDevices::col2rgb(color, TRUE) 中的错误:颜色名称“组”无效)

标签: r ggfortify


【解决方案1】:

这个怎么样?

df$groups <- factor(ifelse(df$gene1 > 0, "Positive", "Others"))

head(df)
      gene1     gene2    gene3     gene4      gene5   groups
1 0.5638534  8.968558 94.40170  62.93106 290.442698 Positive
2 0.0000000 15.248374 45.87507 204.21703 291.501669   Others
3 1.9059518 19.488162 75.89302  97.69643 177.833347 Positive
4 1.9449987  6.358773 54.97159  41.54307 164.835188 Positive
5 0.0000000 16.568077 31.62370  23.72278  31.774541   Others
6 1.7199368  3.788276 80.51450 102.82221   6.259461 Positive

autoplot(prcomp(log(df[1:5]+1)), data=df, colour='groups')

【讨论】:

  • 谢谢!它为我返回错误:$&lt;-.data.frame(*tmp*, "groups", value = integer(0)) 中的错误:替换有 0 行,数据有 253 > autoplot(prcomp(log(df[1:5]+ 1)), data=df, colour='groups') df[1:5] 中的错误:'closure' 类型的对象不是子集但是,受您的解决方案的启发,我想出了这个,它生成了一个准确的图,而且一个令人困惑的警告: autoplot(prcomp(log(df[]+1)), color = ifelse(df$gene1>0, "red", "black")) 警告消息:在 if (value %in% columns) { : 条件长度 > 1 并且只使用第一个元素
  • str(df) 给你什么?用我使用的随机生成的 df 更新了帖子,如果您的 df 具有相同的结构,它应该可以正常工作。对我来说 df 是一个 data.frame,所有基因列的类都是数字,组列是类因子。
猜你喜欢
  • 2018-04-08
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多