Как исправить соотношение сторон в ggplot?
Я пытаюсь изменить размер графика, чтобы вписаться в мой документ, но у меня возникли трудности с получением построенной диаграммы быть квадратом.
пример:
pdf(file = "./out.pdf", width = 5, height = 5)
p <- ggplot(mydata, aes(x = col1, y = col2))
print(p)
aux <- dev.off()
хотя пределы для x и y одинаковы, график в результате не является квадратным. Я думаю, что R делает заключительную панель 5x5", но не заботится о фактическом размере диаграммы.
Как я могу unsquash мои схемы?
3 ответа:
на
ggplot
механизм сохранения соотношения сторон вашего участка заключается в добавленииcoord_fixed()
слой к сюжету. Это позволит сохранить соотношение сторон самого участка, независимо от формы фактического ограничивающего прямоугольника.(Я также предлагаю вам использовать
ggsave
чтобы сохранить полученный участок в pdf / png / etc, а неpdf(); print(p); dev.off()
последовательности.)library(ggplot2) df <- data.frame( x = runif(100, 0, 5), y = runif(100, 0, 5)) ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed()
для обеспечения определенного соотношения сторон, например, для квадрата, используйте
theme(aspect.ratio=1)
.ответ Андри не дает полной картины, так как пример предоставляет, возможно, неестественные данные, где диапазон x равен диапазону y. если бы данные были:
df <- data.frame( x = runif(100, 0, 50), y = runif(100, 0, 5)) ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed()
тогда сюжет будет выглядеть так:
функция coord_fixed () также имеет аргумент для настройки соотношения осей:
ratio
соотношение сторон, выражается как y / xчтобы сюжет можно было сделать квадратным с:
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed(ratio=10)
но вам нужно настроить это с ограничениями переменных или области участка (не все ограничения хорошо делятся на целые числа, как в этих примерах).
для полноты картины: Если вы хотите учитывать очень разные пределы оси:
df <- data.frame( x = runif(100, 0, 5000), y = runif(100, 0, 5)) ratio.display <- 4/3 ratio.values <- (max(df$x)-min(df$x))/(max(df$y)-min(df$y)) plot <- ggplot(df, aes(x=x, y=y)) + geom_point() plot + coord_fixed(ratio.values / ratio.display)
в результате: