使用 ggplot2 自定义素食主成分分析图

Customizing a vegan pca plot with ggplot2

我正在尝试在 ggplot2 中制作一些素食 rda 结果的自定义图。我基本上是在修改方向,如 中所示,以便我使用形状和颜色标签来传达有关样本点的一些信息。

我用素食设置了一个 pca 分析如下

library(vegan)
library(dplyr)
library(tibble)
library(ggplot2)
cbPalette <- c("#000000", "#E69F00", "#56B4E9", "#009E73",  "#0072B2", "#D55E00", "#CC79A7", "#F0E442")
data(dune)
data(dune.env)
dune.pca <- rda(dune)
uscores <- data.frame(dune.pca$CA$u)
uscores1 <- inner_join(rownames_to_column(dune.env), rownames_to_column(data.frame(uscores)), type = "right", by = "rowname")
vscores <- data.frame(dune.pca$CA$v)

我可以画一个简单的双标图

 biplot(dune.pca)

现在,假设我想更多地了解这些不同样本所受的管理条件。我将对它们进行颜色和形状编码并使用 ggplot 绘图。

p1 <- ggplot(uscores1, aes(x = PC1, y = PC2, col = Management,
                         shape = Management)) + 
geom_point() +
scale_color_manual(values=cbPalette) +
scale_fill_manual(values=cbPalette) +
scale_shape_manual(values = c(21:25)) +
theme_bw() +
theme(strip.text.y = element_text(angle = 0))
p1

接下来,我真的很想添加一些双标箭头,向我们展示对应于物种丰度的轴。我可以使用 ggplot 绘制这些箭头,如下所示:

p2 <- ggplot() +  geom_text(data = vscores, aes(x = PC1, y = PC2, label = rownames(vscores)), col = 'red') +
geom_segment(data = vscores, aes(x = 0, y = 0, xend = PC1, yend = PC2), arrow=arrow(length=unit(0.2,"cm")),
            alpha = 0.75, color = 'darkred')
p2

不过,我真正想做的是将这些箭头和点放在同一个图上。目前这是我正在尝试使用的代码:

p3 <- p1 + geom_text(data = vscores, aes(x = PC1, y = PC2, label = rownames(vscores)), col = 'red') +
geom_segment(data = vscores, aes(x = 0, y = 0, xend = PC1, yend = PC2), arrow=arrow(length=unit(0.2,"cm")),
            alpha = 0.75, color = 'darkred')
p3

令我烦恼的是,这只会产生一个空白图(空 window,没有错误消息)。显然我遗漏了一些东西或错误地缩放了一些东西。关于如何最好地叠加最后两个图有什么建议吗?

尝试:

library(cowplot) #not needed I just had it attached while answering the question hence the theme.
library(ggplot2)

ggplot(uscores1) + 
      geom_point(aes(x = PC1, y = PC2, col = Management,
                     shape = Management)) +
      scale_color_manual(values=cbPalette) +
      scale_fill_manual(values=cbPalette) +
      scale_shape_manual(values = c(21:25)) +
      geom_text(data = vscores, aes(x = PC1, y = PC2, label = rownames(vscores)), col = 'red') +
      geom_segment(data = vscores, aes(x = 0, y = 0, xend = PC1, yend = PC2), arrow=arrow(length=unit(0.2,"cm")),
                   alpha = 0.75, color = 'darkred')+
      theme_bw() +
      theme(strip.text.y = element_text(angle = 0))

p1 情节将 colshape 变量 Management 传递给 geom_text/geom_segment,因为它们没有在那里定义,但没有 Management data = vscores 中的列。至少我是这么认为的,基于错误:

`Error in eval(expr, envir, enclos) : object 'Management' not found`

检查来自 githubggvegan 包裹。它仍然是 0.0 版本,目前还没有积极开发,但是如果你说

library(ggvegan)
autoplot(dune.pca) # your result object

你得到这张图,你可以用通常的 ggplot2 方式自定义各种美学。

您还应该看看 GitHub (https://github.com/jfq3/ggordiplots) 上的 ggordiplots。它包括函数 gg_env__fit,它使环境向量适合排序图。包中的所有函数都默默地 return 数据框,您可以根据需要使用它们来修改绘图。该软件包包括一个关于修改地块的小插图。您可以通过转到 john-quensen.com 并查看 GitHub 页面来阅读小插图而无需安装软件包。