R ggbiplot для результатов PCA: почему результирующий график такой узкий и как настроить ширину?
Поэтому я делаю анализ PCA, и я обычно отображаю результаты с помощью ggplot2, но я недавно обнаружил, что ggbiplot может показывать стрелки с переменными.
Кажется, ggbiplot работает нормально, хотя и показывает некоторые проблемы (например, невозможность изменения размера точки, отсюда и весь слой, который я делаю в MWE).
Проблема, с которой я сталкиваюсь сейчас, заключается в том, что, хотя графики ggplot2 корректируют ширину графика в соответствии с областью печати, ggbiplot - нет. С моими данными, ggbiplot ужасно узкий и оставляет ужасно широкие вертикальные поля, даже если он расширяет тот же интервал оси x, что и график ggplot2 (фактически это тот же график).
Я использую данные радужной оболочки, поэтому мне пришлось сделать ширину 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 (желаемая ширина графика):
Вывод ggbiplot (график слишком узкий для области построения):
Посмотрите, как, в то время как ggplot2 регулирует ширину графика, в соответствии с площадью графика, ggbiplot не делает. По моим данным, график ggbiplot чрезвычайно узок и оставляет большие вертикальные поля.
Мой вопрос здесь: Как заставить ggbiplot вести себя как ggplot2? Как я могу настроить ширину графика в соответствии с желаемой областью печати (размер png) с помощью ggbiplot? Спасибо!
1 ответ
Изменить ratio
аргумент в coord_equal()
до некоторого значения меньше 1 (по умолчанию в ggbiplot()
) и добавьте его в свой сюжет. Из описания функции: "Отношения выше единицы делают единицы на оси у длиннее, чем единицы на оси х, и наоборот".
P + coord_equal(ratio = 0.5)
Бест, Маркус