使用ggfortify R包中的ggplot2 :: autoplot重现stats :: biplot

时间:2015-02-08 15:10:22

标签: r plot ggplot2 ggfortify

我正在尝试使用stats::biplot ggplot2::autoplot包中的ggfortify重现以下R图。

biplot(prcomp(USArrests, scale = TRUE))

enter image description here

以下是来自ggplot2::autoplot ggfortify包的R代码及其输出。

devtools::install_github("sinhrks/ggfortify")
 library(ggfortify)
ggplot2::autoplot(stats::prcomp(USArrests, scale=TRUE), label = TRUE, loadings.label = TRUE)

enter image description here

问题

  1. 为什么这两个地块不同?如何重现基础图?
  2. 如何添加标签中显示的标签?

3 个答案:

答案 0 :(得分:2)

感谢您使用该软件包。问题取决于{dplyr}版本,并在{ggfortify}中修复。你可以更新包然后试试吗?

我已将修复后的结果附加到以下链接:

https://github.com/sinhrks/ggfortify/pull/21

答案 1 :(得分:1)

要在ggplot2中重新创建此图,您只需从prcomp对象中提取所需的数据。在这种情况下,您正在绘制原始数据以及可变旋转负载,因此您需要两个数据框。

试试这个:

x <- prcomp(USArrests, scale = TRUE)
z1 <- data.frame(State = rownames(x$x), x$x[, 1:2])
z2 <- data.frame(State = rownames(x$rotation), x$rotation[, 1:2])

library(ggplot2)
ggplot(z1, aes(PC1, PC2, label=State)) + 
  geom_text(size=3) +
  geom_segment(data=z2, aes(PC1, PC2, xend=0, yend=0), col="red") +
  geom_text(data=z2, aes(PC1, PC2, label=State), col="red") +
  theme_bw()

enter image description here

答案 2 :(得分:0)

Autoplot模拟使用biplot.prcomp选项pc.biplot = TRUE获得的行为/缩放:

devtools::install_github("sinhrks/ggfortify")
 library(ggfortify)
ggplot2::autoplot(stats::prcomp(USArrests, scale=TRUE), label = TRUE, loadings.label = TRUE)

enter image description here

biplot(prcomp(USArrests, scale = TRUE), pc.biplot = TRUE)

enter image description here

然后它产生Gabriel(1971)的“主成分双标图”,其中观察按sqrt(n)按比例放大,变量按sqrt(n)按比例缩小。变量之间的内积然后近似协方差,观测之间的距离近似马哈拉诺比斯距离。通常这也是你想要的,另见详细的扩展here

ggord btw也是制作biplots的好方法,ggbiplot也是如此。

PS:上面标记为正确的答案并不是我认为的正确答案。