【问题标题】:How can I remove arrows from ggbiplot of PCA in R that are not significant?如何从 R 中 PCA 的 ggbiplot 中删除不重要的箭头?
【发布时间】:2019-02-28 15:38:37
【问题描述】:

所以,我试图在昼夜猛禽的饮食中创建一个猎物顺序 PCA 的 ggbiplot,但问题是 ggbiplot 函数会自动为每个顺序创建箭头。只有大约 8 个订单对我的研究具有重要意义(即 PC1 和 PC2 中的值大于或等于 0.1)。

这就是ggbiplot 现在的样子:


我还能够使用var.axes = FALSE 函数成功删除所有箭头以获得此图:


但问题是,无论从哪一个图中,我都不确定如何只删除一部分箭头,以便我可以保留我需要的 8 个箭头,或者在删除所有箭头后从头开始将这 8 个添加回图中箭头。

编辑:我希望所有 38 个订单的 PC 值仍被计入绘图,我只想删除不必要的箭头,直到只剩下 8 个。

可重现的例子:

#load iris data
iris$Species = NULL # (to run the PCA)
iris_pca = prcomp(iris)
ggbiplot(iris_pca) + theme_classic()

所以,假设我不想包含 Sepal.Width 或 Petal.Width 的箭头。我将如何删除这些并保留其他两个?

【问题讨论】:

  • 通过阅读文档,我将提供一个向量,为 ggbiplot(df, choices = ) 参数提供 8 个组件。您可能可以使用 choices = c(pc >= 1) 等逻辑向量来执行此操作,如果您提供一些数据并且您使用的代码作为最小示例(请参阅 here),答案可能会更有帮助。
  • 感谢您的评论,bob1。但这会只绘制我感兴趣的 8 个订单而没有其他内容吗?我应该在我的问题中澄清,我想将所有订单的信息绘制到 ggbiplot 中,我只想删除所有其他箭头,直到总共有 8 个箭头(而不是每个订单的箭头,就像它在自动输出一样)。
  • 它只绘制 8 个订单可能是正确的。我完全不熟悉这个包,但你可以选择 8 个进行绘图,然后通过另一个调用 ggbiplot 覆盖全部。否则,使用 inkscape 或类似方法删除箭头的一些后处理可能是一个想法。
  • MrFlick,刚刚添加了一个非常简单的可重现示例。我唯一的问题与从 ggbiplot 中删除一些箭头并保留其他箭头有关。

标签: r pca ggbiplot


【解决方案1】:

看代码here,好像不行。如下所示,您可以在其中更改生成的 ggplot2 对象。

# Load library
library(ggbiplot)
#> Loading required package: ggplot2
#> Loading required package: plyr
#> Loading required package: scales
#> Loading required package: grid

# Remove species
iris$Species <- NULL

# Perform PCA
iris_pca <-  prcomp(iris) 

# Create ggbiplot
g <- ggbiplot(iris_pca) + theme_classic()

# Before plot
plot(g)

# Get ggplot2 object
g <- ggplot_build(g)

# Remove unwanted arrows & labels, say, Petal.Length Petal.Width
g$data[[1]] <- g$data[[1]][-(3:4), ]
g$data[[3]] <- g$data[[3]][-(3:4), ]

# Repackage & plot
plot(ggplot_gtable(g))

reprex package (v0.2.1) 于 2019-03-01 创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多