用于PCA结果的R ggbiplot:为什么结果图如此窄以及如何调整宽度?

时间:2017-09-14 07:51:17

标签: r ggplot2 pca ggbiplot

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

ggbiplot似乎工作正常,虽然它显示了一些问题(比如改变点大小的不可能性,因此我在MWE中做的整个事情)。

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

我在这里使用 iris 数据,因此我必须使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输出(所需的绘图宽度): test1

ggbiplot输出(绘图区域的绘图太窄): test2

当ggplot2调整绘图宽度时,看看如何绘制区域,ggbiplot不会。根据我的数据,ggbiplot图非常窄并留下很大的垂直边距。

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

1 个答案:

答案 0 :(得分:1)

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

P + coord_equal(ratio = 0.5)

Best,Markus