【问题标题】:PCA with ggplot in R becomes a Wilkinson dotplot/unit histogram based on colour inputR 中带有 ggplot 的 PCA 成为基于颜色输入的 Wilkinson 点图/单位直方图
【发布时间】:2020-12-17 15:35:06
【问题描述】:

我是 R 新手,遇到了以下问题:

我试图用 ggplot() 的 RNAseq 计数数据制作 PCA。我有两个变量:细胞类型(4)和条件(2)。我想在总共 8 种不同的条件下使用 8 种不同的颜色,但这让我明白了:

我使用的代码:

df <- data.frame(meta, pca$x)
ggplot(df, aes(df[,27], df[,28])) +
  geom_point(aes(color = meta$colours)) +
  xlab(X) +
  ylab(Y) +
  ggtitle(Title_pca) +
  theme(axis.text.y = element_text(size = 11), 
        axis.text.x = element_text(size = 11), 
        axis.title.y = element_text(size = 14), 
        axis.title.x = element_text(size = 14), 
        panel.background = element_blank(), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        panel.border = element_rect(colour = "black", fill = NA, size = 1), 
        plot.title = element_text(size = 15)
        ) +
  scale_colour_manual(name = "Condition", 
                      labels = c("B cells + Abs", "B cells + no Abs", "CD4+ T cells + Abs", "CD4+ T cells + no Abs", "mDcs + Abs", "mDcs + no Abs", "Monocytes + Abs", "Monocytes + no Abs"), 
                      values = c("#FF0000", "#FF7A7A", "#FF9D00", "#FFC466", "#00B3FF", "#91DEFF", "#A200FF", "#CC73FF")
                      )

我想得到像散点图一样的点,当然,不限于颜色。当我在 DESeq2 包的 plotPCA() 中使用它时,整个 scale_colour_manual 参数都有效。这也证实了我的颜色与我在元数据中使用的颜色相匹配。但是,我不知道我是如何得到这些分离的,也不知道如何删除它们。所以,我的问题是:我做错了什么,我该如何解决?

一些附加信息:

# Rstudio version:                    1.3.1093
# R version:                          4.0.2
# Platform:                           x86_64-w64-mingw32/x64 (64-bit)

#                                                                Version
# Packages:                           DESeq2                     1.30.0
#                                     ggplot2                    3.3.2
#                                     ggthemes                   4.2.0

数据集组织:

#           Celltype     bnAbs      colours
# Sample 1  B cells      Yes        "FF0000"
# Sample 2  Monocytes    No         "CC73FF"

这里,Celltype 和 bnAbs 列的类是 factor,colors 列是字符。

正如我之前所说,我只做了几个星期,所以如果您需要更多信息来帮助我,我很抱歉,我当然会尽快提供。

【问题讨论】:

    标签: r ggplot2 pca


    【解决方案1】:

    欢迎来到 Stackoverflow。您的问题是从 R 开始时很常见的问题,尤其是当您从 base 地块转移到 ggplot2 时。 ggplot2 计算参数并隐式提取名称。这是在 R 中可能出现的一种“非标准”行为。为了便于理解,假设您的数据具有名为 PC1PC2... 和 meta 的列(meta 似乎成为带有颜色的data.frame)。指定参数的最简单(也是推荐的方法)是使用这些列名作为参数,并提供您的data.frame 作为data 参数。所以

    ggplot(df, aes(PC1, PC2, col = colours)) +
      geom_point() + 
      scale_colour_manual(name = "Condition", 
                          labels = c("B cells + Abs", "B cells + no Abs", "CD4+ T cells + Abs", "CD4+ T cells + no Abs", "mDcs + Abs", "mDcs + no Abs", "Monocytes + Abs", "Monocytes + no Abs"), 
                          values = c("#FF0000", "#FF7A7A", "#FF9D00", "#FFC466", "#00B3FF", "#91DEFF", "#A200FF", "#CC73FF")
                          )
    

    应该是最小可行的解决方案。请注意,我指定了不带引号的名称"。这是“非标准”行为(具体在ggplot2 中实现)。为此,您需要df 有一个列colour。这不应该指定颜色本身("#FF0000"),而是指示要为每个组着色的因素(类似于您的“标签”)。由于您使用的是RNAseq,因此您可能有一个列RNA-name,可以使用它。

    这就是STHDA tries to show here

    【讨论】:

    • 嗨奥利弗,感谢您的回复!我在 df 中为 8 个条件创建了一个具有 8 个级别的列,并尝试了您的代码。然而,一切都没有改变。不知何故,这些点仍然按颜色分隔,如我添加到帖子中的图表所示。关于我现在可以做什么的任何建议?
    • 不用担心。我不完全确定你哪里出错了。您可以尝试使用一个小数据集(irismtcars 是 R 中的标准)来重现您的结果,看看您是否可以生成一个小的可重现示例?目前我无法重现您的问题。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2019-08-22
    • 2012-01-18
    • 2021-06-21
    • 2013-08-30
    相关资源
    最近更新 更多