0

所以我做了一个 PCA 分析,我通常用 ggplot2 绘制结果,但我最近才发现 ggbiplot 可以显示带有变量的箭头。

ggbiplot 似乎工作正常,尽管它显示了一些问题(例如无法更改点大小,因此我在 MWE 中所做的整个层的事情)。

我现在面临的问题是,虽然 ggplot2 绘图将绘图宽度调整到绘图区域,但 ggbiplot 不会。使用我的数据,ggbiplot 非常窄并且留下非常宽的垂直边距,即使它扩展了与 ggplot2 图相同的 x 轴间隔(实际上,它是相同的图)。

我在这里使用虹膜数据,所以我必须使 png 宽度特别大,这样我面临的问题就变得很明显了。请检查以下 MWE:

data(iris)
head(iris)
pca.obj <- prcomp(iris[,1:4],center=TRUE,scale.=TRUE)
pca.df <- data.frame(Species=iris$Species, as.data.frame(pca.obj$x))
rownames(pca.df) <- NULL
png(filename="test1.png", height=500, width=1000)
print(#or ggsave()
  ggplot(pca.df, aes(x=PC1, y=PC2)) +
  geom_point(aes(color=Species), cex=3)
)
dev.off()
P <- ggbiplot(pca.obj,
         obs.scale = 1, 
         var.scale=1,
         ellipse=T,
         circle=F,
         varname.size=3,
         groups=iris$Species, #no need for coloring, I'm making the points invisible
         alpha=0) #invisible points, I add them below
P$layers <- c(geom_point(aes(color=iris$Species), cex=3), P$layers) #add geom_point in a layer underneath (only way I have to change the size of the points in ggbiplot)
png(filename="test2.png", height=500, width=1000)
print(#or ggsave()
    P
)
dev.off()

此代码生成以下两个图像。

ggplot2 输出(所需的绘图宽度): 测试1

ggbiplot 输出(绘图区域太窄): 测试2

看看 ggplot2 如何将绘图宽度调整到绘图区域,而 ggbiplot 不会。使用我的数据,ggbiplot 图非常窄,垂直边距很大。

我的问题是:如何让 ggbiplot 表现得像 ggplot2?如何使用 ggbiplot 将绘图宽度调整为所需的绘图区域(png 大小)?谢谢!

4

1 回答 1

1

ratio将参数更改为coord_equal()小于 1 的某个值(默认为ggbiplot())并将其添加到您的绘图中。从函数描述:“比率高于 1 使 y 轴上的单位比 x 轴上的单位长,反之亦然。”

P + coord_equal(ratio = 0.5)

注意:正如@Brian 在评论中指出的那样,“改变纵横比会使对主成分向量长度的解释产生偏差,这就是为什么它被设置为 1。”

于 2017-09-14T08:10:33.117 回答