使用ggplot2自定义纯素pca图

我试图在ggplot2中制作一些素食主义者rda结果的自定义图。 我基本上修改了ggplot中绘制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

令我烦恼的是,这只产生一个空白图(空窗口,没有错误信息)。 显然,我错过了某些东西或者错误地缩放了某些东西。 关于我如何最好地叠加最后两个地块的任何建议?


尝试:

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因为它们没有在那里定义,但data = vscores没有Management列。 至少我认为是基于这样的错误:

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

从github检查ggvegan包。 它仍然在0.0版本中,目前没有积极开发,但如果你说

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

你可以得到这个图表,你可以用通常的ggplot2方式来定制各种美学。

在这里输入图像描述


你也应该看看GitHub上的ggordiplots(https://github.com/jfq3/ggordiplots)。 它包括函数gg_env__fit,它将环境向量与排序图匹配。 程序包中的所有函数都会静默地返回数据帧,您可以使用它来随意修改绘图。 该软件包包含修改绘图的小插图。 您可以通过转到john-quensen.com并查看GitHub页面来阅读这些小插件,而无需安装该软件包。

链接地址: http://www.djcxy.com/p/30899.html

上一篇: Customizing a vegan pca plot with ggplot2

下一篇: Plotting princomp loadings with ggplot