我对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和biplot感到困惑。我还想按组为数据点着色,例如性别。任何帮助都会很棒。
最佳答案
软件包ggbiplot(...)
中有一个ggbiplot
函数,但仅适用于prcomp,princomp,PCA或lda类的对象。plot.rda(...)
只是在PC1-PC2空间中定位每个个案(人)。 biplot.rda(...)
将 vector 添加到原始数据集中每个变量的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)
进行比较,我想您会发现它们是相同的。相信或不相信,到目前为止,最困难的部分是使文本与箭头正确对齐。关于r - 在ggplot中绘制RDA(纯素),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32194193/