Я пытаюсь изменить размер графика, чтобы он соответствовал моему документу, но у меня возникают трудности с получением построенной диаграммы в виде квадрата.
Пример:
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 дюймов, но не заботится о фактическом размере диаграммы.
Как я могу разжать свои диаграммы?
hjust
положение заголовка - попробуйтеopts(axis.title.y=theme_text(hjust=10))
. Но, к сожалению, похоже, что нет. См. Groups.google.com/group/ggplot2/browse_thread/thread/… для обсуждения списка рассылки ggplot и ответа @Baptiste.y=runif(100, 0, 50)
то аспект графика больше не квадратный.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 () также имеет аргумент для регулировки соотношения осей:
Чтобы участок можно было сделать квадратным с помощью:
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)
В результате чего:
источник
plot + theme(aspect.ratio=4/3)
? Ggplot может иметь несколько уровней с несколькими наборами данных, а оси могут иметь произвольные коэффициенты расширения, поэтому вычисление отношения y / x из одного источника данных кажется довольно хрупким.