Как в R складывать фигуры, созданные с помощью ggplot2, друг на друга? - PullRequest
0 голосов
/ 08 мая 2020

Я сделал две фигуры в ggplot, которые теперь хочу сложить друг на друга. Я могу сложить их в стек с помощью функции grid.arrange(p1, p2, ncol =1) в пакете gridExtra, однако обе фигуры растягиваются по горизонтали, приобретая форму прямоугольников. Есть идеи, как сохранить квадрат обеих фигур (оси x и y имеют одинаковую общую длину).

library(ggplot2)
library(gridExtra)

x1 <- rnorm(20)
y1 <- rnorm(20)
x2 <- rnorm(20)
y2 <- rnorm(20)

dat1 <- data.frame(x1, y1)
dat2 <- data.frame(x2, y2)

p1 <- ggplot(data = dat1, aes(x=x1, y=y1)) + geom_point()
p2 <- ggplot(data = dat2, aes(x=x2, y=y2)) + geom_point()

grid.arrange(p1,p2, ncol=1)

Я попытался отрегулировать ширину с помощью аргумента widths, но все равно получаю сообщение об ошибке Error in arrangeGrob(...) : length(widths) == ncol is not TRUE.

grid.arrange(p1,p2, ncol=1, widths = c(1,1))

Ответы [ 4 ]

0 голосов
/ 08 мая 2020

Как насчет этого:

library(ggplot2)
library(gridExtra)

x1 <- rnorm(20)
y1 <- rnorm(20)
x2 <- rnorm(20)
y2 <- rnorm(20)

dat1 <- data.frame(x1, y1)
dat2 <- data.frame(x2, y2)

p1 <- ggplot(data = dat1, aes(x=x1, y=y1)) + geom_point()
p2 <- ggplot(data = dat2, aes(x=x2, y=y2)) + geom_point()

grid.arrange(p1,p2, ncol=1, widths = unit(10, c("cm")), heights = c(unit(10, c("cm")), unit(10, c("cm"))))

enter image description here

0 голосов
/ 08 мая 2020

Я большой любитель лоскутного шитья для аранжировки сюжетов. Вы получаете квадратные графики, задавая размеры при экспорте фигуры.

library(patchwork)
p3 <- p1/p2 + plot_layout(ncol = 1, heights = c(1,1))
ggsave("test.png", p3, width = 10, height = 20, units = c("cm"))
0 голосов
/ 08 мая 2020

Спасибо за ответы, но я действительно понял это с помощью упомянутых мной пакетов. Мне нужно было добавить theme(aspect.ratio = 1) к обеим цифрам.

p1 <- ggplot(data = dat1, aes(x=x1, y=y1)) + geom_point() + theme(aspect.ratio = 1)
p2 <- ggplot(data = dat2, aes(x=x2, y=y2)) + geom_point() + theme(aspect.ratio = 1)

grid.arrange(p1,p2, ncol=1)
0 голосов
/ 08 мая 2020

Пакет пэчворк создан для этого.

Plot1 + Plot2 # рядом Plot1 / Plot2 # сверху вниз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...