如何用FactoMineR创建一个双标图?

时间:2014-03-13 14:23:00

标签: r ggplot2 pca

问题很简单。我想对PCA(mydata)的结果进行双标绘制,这是我使用FactoMineR进行的。因为看起来我只能使用内置绘图设备显示以太变量或个体:

 plot.PCA(pca1, choix="ind/var").

我知道使用princomp()的结果可以轻松完成,但我真的很喜欢FactoMineR处理NA的方式,而且在很多方面对我来说似乎更容易。

有办法吗?我用ggplot2以某种方式完成了它,但是仅仅使用了princomp()的结果,我不知道如何更改代码以便它可以与PCA()一起使用。

我还看到了使用ggplot2(Look at the bottom)分别进行单独和变量绘图的解决方案,但是如何将它们组合起来呢?

也许解决方案在某个方面是第一个链接,但后来我真的不明白:/。

我希望自己清楚明白!

问候

的Lukas

2 个答案:

答案 0 :(得分:3)

您也可以使用ggord执行此操作,如果您为其添加其他S3方法,代码很容易适应其他排序对象:

install.packages("devtools")
library(devtools)
install_github("fawda123/ggord")
library(ggord)
library(FactoMineR)
ord <- PCA(iris[, 1:4], graph = FALSE)
ggord(ord, iris$Species)

enter image description here

(尽管可能有不同类型的缩放,例如行主(形式双标图),列主(协方差双标图),对称双标图等,目前goord不支持。虽然编辑{{}很容易1}} S3方法或ggord.PCA方法来支持这一点。)

答案 1 :(得分:1)

您好,您可以调整FactoMineR的第一个link代码来代替PCbiplot2 <- function(res.pca, x="Dim.1", y="Dim.2") { if(!require(ggplot2)) install.packages("ggplot2") # res.pca being a PCA object data <- data.frame(obsnames=row.names(res.pca$ind$coord), res.pca$ind$coord) plot <- ggplot(data, aes_string(x=x, y=y)) + geom_text(alpha=.4, size=3, aes(label=obsnames)) plot <- plot + geom_hline(aes(0), size=.2) + geom_vline(aes(0), size=.2) datapc <- data.frame(varnames=rownames(res.pca$var$coord), res.pca$var$coord) mult <- min( (max(data[,y]) - min(data[,y])/(max(datapc[,y])-min(datapc[,y]))), (max(data[,x]) - min(data[,x])/(max(datapc[,x])-min(datapc[,x]))) ) datapc <- transform(datapc, v1 = .7 * mult * (get(x)), v2 = .7 * mult * (get(y)) ) plot <- plot + coord_equal() + geom_text(data=datapc, aes(x=v1, y=v2, label=varnames), size = 5, vjust=1, color="red") plot <- plot + geom_segment(data=datapc, aes(x=0, y=0, xend=v1, yend=v2), arrow=arrow(length=unit(0.2,"cm")), alpha=0.75, color="red") plot } library(FactoMineR) fit2 <- PCA(USArrests, graph=F) PCbiplot2(fit2) 这样的代码:

{{1}}

告诉我它是否有效!

编辑:添加像jlhoward建议的库