在ggplot中绘制RDA(素食主义者)

我仍然对R很陌生,试图学习如何使用图书馆素食主义者,我可以使用正常的情节功能轻松地在R中绘制图素。 当我想在ggplot中绘制数据时出现问题。 我知道我必须从我创建的列表中提取正确的数据,但是哪些和如何? 我一直在练习的数据集可以在这里下载https://drive.google.com/file/d/0B1PQGov60aoudVR3dVZBX1VKaHc/view?usp=sharing我用来获取数据转换的代码是这样的:

library(vegan)
library(dplyr)
library(ggplot2)
library(grid)
data <- read.csv(file = "People.csv", header = T, sep = ",", dec = ".", check.names = F, na.strings=c("NA", "-", "?"))
data2 <- data[,-1]
rownames(data2) <- data[,1]
data2 <- scale(data2, center = T, scale = apply(data2, 2, sd))
data2.pca <- rda(data2)

这给了我一个列表,我可以使用基本的“plot”和“biplot”函数进行绘图,但是我不知道如何在ggplot中绘制PCA和双标图。 我还想按群组着色数据点,例如性别。 任何帮助都会很棒。


有一个ggbiplot(...)封装功能ggbiplot ,但只带班prcomp,princomp,PCA,或LDA的对象工作。

plot.rda(...)只是在PC1 - PC2空间中查找每个案例(人员)。 biplot.rda(...)将矢量添加到原始数据集中每个变量的PC1和PC2加载。 事实证明, plot.rda(...)biplot.rda(...)使用汇总rda对象生成的数据,而不是rda对象本身。

smry <- summary(data2.pca)
df1  <- data.frame(smry$sites[,1:2])       # PC1 and PC2
df2  <- data.frame(smry$species[,1:2])     # loadings for PC1 and PC2
rda.plot <- ggplot(df1, aes(x=PC1, y=PC2)) + 
  geom_text(aes(label=rownames(df1)),size=4) +
  geom_hline(yintercept=0, linetype="dotted") +
  geom_vline(xintercept=0, linetype="dotted") +
  coord_fixed()
rda.plot

rda.biplot <- rda.plot +
  geom_segment(data=df2, aes(x=0, xend=PC1, y=0, yend=PC2), 
               color="red", arrow=arrow(length=unit(0.01,"npc"))) +
  geom_text(data=df2, 
            aes(x=PC1,y=PC2,label=rownames(df2),
                hjust=0.5*(1-sign(PC1)),vjust=0.5*(1-sign(PC2))), 
            color="red", size=4)
rda.biplot

如果你将这些结果与plot(data2.pca)biplot(data2.pca)我想你会发现它们是相同的。 到目前为止,相信它或者不是最难的部分,就是让文本与箭头正确对齐。


根据@jlhoward,您可以使用包名称相同的ggbiplot 。 然后,你需要做的唯一事情就是投你的rda结果prcomp由已知的结果ggbiplot 。 这是一个功能来做到这一点:

#' Cast vegan::rda Result to base::prcomp
#'
#' Function casts a result object of unconstrained
#' code{link[vegan]{rda}} to a code{link{prcomp}} result object.
#'
#' @param x An unconstrained code{link[vegan]{rda}} result object.
#'
#' @importFrom vegan scores
#' @export
`as.prcomp.rda` <-
    function(x)
{
    if (!is.null(x$CCA) || !is.null(x$pCCA))
        stop("works only with unconstrained rda")
    structure(
        list(sdev = sqrt(x$CA$eig),
             rotation = x$CA$v,
             center = attr(x$CA$Xbar, "scaled:center"),
             scale = if(!is.null(scl <- attr(x$CA$Xbar, "scaled:scale")))
                         scl
                     else
                         FALSE,
             x = scores(x, display = "sites", scaling = 1,
             choices = seq_len(x$CA$rank),
             const = sqrt(x$tot.chi * (nrow(x$CA$u)-1)))),
        class = "prcomp")
}

你可以使用我的ggvegan包。 它仍在开发中,但可用于某些类型的对象,包括rdacca

假设您可以简单地执行示例数据和分析:

autoplot(data2.pca, arrows = TRUE)

得到你想要的那种双胞胎。 这产生

在这里输入图像描述

您可以通过获取网站标签

autoplot(data2.pca, arrows = TRUE, geom = "text", legend = "none")

其中还显示了如何在需要的情况下抑制图例( legend.position采用适合legend.position中相同主题元素的 )。

在这里输入图像描述

autoplot()方法外,你还没有大量的控制,但你可以使用fortify()ggplot2的方式获取数据,然后使用其他答案的想法或为具体细节研究ggvegan:::autoplot.rda的代码。

您需要从github安装ggvegan ,因为该软件包尚未安装在CRAN上:

install.packages("devtools")
devtools::install_github("gavinsimpson/ggvegan")

这会让你的版本0.0-6(或更高版本),其中包括一些小的调整,以产生比以前的版本更整洁的情节。

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

上一篇: Plotting RDA (vegan) in ggplot

下一篇: R saving multiple ggplot2 plots as R