从 ggfortify R 包中用 ggplot2::autoplot 复制 stats::biplot
Reproducing stats::biplot with ggplot2::autoplot from ggfortify R package
我正在尝试使用 ggfortify
R
包中的 ggplot2::autoplot
重现以下 stats::biplot
图。
biplot(prcomp(USArrests, scale = TRUE))
这是我的 ggplot2::autoplot
来自 ggfortify
R
包的代码及其输出。
devtools::install_github("sinhrks/ggfortify")
library(ggfortify)
ggplot2::autoplot(stats::prcomp(USArrests, scale=TRUE), label = TRUE, loadings.label = TRUE)
问题
- 为什么两个情节不同?如何重现基本剧情?
- 如何添加如底图所示的标签?
要在 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()
感谢您使用该软件包。该问题取决于 {dplyr} 版本,并已在 {ggfortify} 中修复。你能更新包然后试试吗?
我已将修复后的结果附在下方 link:
Autoplot 模拟您使用 biplot.prcomp
选项 pc.biplot = TRUE
得到的 behaviour/scaling :
devtools::install_github("sinhrks/ggfortify")
library(ggfortify)
ggplot2::autoplot(stats::prcomp(USArrests, scale=TRUE), label = TRUE, loadings.label = TRUE)
biplot(prcomp(USArrests, scale = TRUE), pc.biplot = TRUE)
然后生成 Gabriel (1971) 的 "principal component biplot",其中观察值按 sqrt(n) 放大,变量按 sqrt(n) 缩小。然后,变量之间的内积近似协方差,观测值之间的距离近似马氏距离。通常这就是您想要的,另请参阅详细说明 here.
ggord btw is also a nice package for making biplots, as is ggbiplot.
PS:我认为上面标记为正确的答案并不是真正正确的答案。
我正在尝试使用 ggfortify
R
包中的 ggplot2::autoplot
重现以下 stats::biplot
图。
biplot(prcomp(USArrests, scale = TRUE))
这是我的 ggplot2::autoplot
来自 ggfortify
R
包的代码及其输出。
devtools::install_github("sinhrks/ggfortify")
library(ggfortify)
ggplot2::autoplot(stats::prcomp(USArrests, scale=TRUE), label = TRUE, loadings.label = TRUE)
问题
- 为什么两个情节不同?如何重现基本剧情?
- 如何添加如底图所示的标签?
要在 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()
感谢您使用该软件包。该问题取决于 {dplyr} 版本,并已在 {ggfortify} 中修复。你能更新包然后试试吗?
我已将修复后的结果附在下方 link:
Autoplot 模拟您使用 biplot.prcomp
选项 pc.biplot = TRUE
得到的 behaviour/scaling :
devtools::install_github("sinhrks/ggfortify")
library(ggfortify)
ggplot2::autoplot(stats::prcomp(USArrests, scale=TRUE), label = TRUE, loadings.label = TRUE)
biplot(prcomp(USArrests, scale = TRUE), pc.biplot = TRUE)
然后生成 Gabriel (1971) 的 "principal component biplot",其中观察值按 sqrt(n) 放大,变量按 sqrt(n) 缩小。然后,变量之间的内积近似协方差,观测值之间的距离近似马氏距离。通常这就是您想要的,另请参阅详细说明 here.
ggord btw is also a nice package for making biplots, as is ggbiplot.
PS:我认为上面标记为正确的答案并不是真正正确的答案。