Создайте структуру из нескольких панелей, чтобы впоследствии вставлять графики разных размеров (всего 16)

Я сделал 15 круговых диаграмм и одну линейную диаграмму.

Моя цель теперь состоит в том, чтобы выстроить их в соответствии со структурой на картинке.

введите здесь описание изображения

Есть ли способ, как

par(mfrow=c(2,2))

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


person user33125    schedule 29.02.2016    source источник
comment
Обычно люди используют пакет gridExtra для сложных макетов. grid.arrange может быть полезно.   -  person alistaire    schedule 29.02.2016


Ответы (2)


попробуй это,

library(gridExtra)
library(grid)
l <- cbind(c(5:1, NA), rbind(6:10, matrix(16, 5, 5)), c(11:15, NA))

# dummy placeholders for illustration
plots <- lapply(1:16, function(ii) 
            grobTree(rectGrob(), textGrob(paste("plot", ii))))

grid.arrange(grobs=plots, layout_matrix=l)

введите здесь описание изображения

для реальных сюжетов попробуйте

 plots <- replicate(16, ggplot(), simplify = FALSE)

или список ваших 16 графиков (или групп сетки),

введите здесь описание изображения

person baptiste    schedule 29.02.2016
comment
Прошу прощения за основной вопрос, но я не привык много работать с grobTree: если я хочу вставить графы (например, l1, l2, l3... до l16) в эту структуру, как мне это сделать? Спасибо вам большое за ваш ответ. - person user33125; 01.03.2016
comment
поместите grobs в list() и передайте его как grobs= в grid.arrange(), или просто передайте их один за другим как безымянные аргументы, а ... позаботится об этом. - person baptiste; 01.03.2016
comment
Эй, баптист! В итоге я воспользовался вашим кодом. Большое спасибо за это! Однако у меня есть 2 дополнительных вопроса: 1) есть ли способ увеличить меньшие участки без изменения размера большего участка? 2) Есть ли способ уменьшить количество пробелов между графиками? В любом случае: большое спасибо! - person user33125; 01.03.2016
comment
1) неясно, как сохранить тот же макет, который вы изначально предложили, и изменить размер меньших участков (как/где они будут располагаться вокруг большого?); 2) Пустое пространство обычно контролируется краем каждого отдельного графика, которым можно управлять в настройках темы для ggplot. Задайте новый вопрос, если вы застряли. - person baptiste; 01.03.2016
comment
Спасибо за первый комментарий, Батист. Я не думал об этом. Я верю, что поля могут быть решением, но я не мог понять, как это сделать. Я задал новый вопрос (stackoverflow.com/questions/35742779/), но прежде чем я уйду отсюда: еще раз большое спасибо за вашу помощь! Хорошего дня! - person user33125; 02.03.2016

Возможно, вы захотите извлечь размеры в матрицу какого-либо типа, но этот подробный способ приведет вас туда и позволит вам увидеть, что происходит с точки зрения размера и размещения — почти уверен, что это оболочка для grid или gridExtra:

library(cowplot)

p1 <- ggplot(mtcars, aes(x = hp, y = mpg)) + geom_point()

ggdraw() +
  draw_plot(p1, 0, 0.1, 0.1, 0.1) +
  draw_plot(p1, 0, 0.2, 0.1, 0.1) +
  draw_plot(p1, 0, 0.3, 0.1, 0.1) +
  draw_plot(p1, 0, 0.4, 0.1, 0.1) +
  draw_plot(p1, 0, 0.5, 0.1, 0.1) +
  draw_plot(p1, 0.1, 0.5, 0.1, 0.1) +
  draw_plot(p1, 0.2, 0.5, 0.1, 0.1) +
  draw_plot(p1, 0.3, 0.5, 0.1, 0.1) +
  draw_plot(p1, 0.4, 0.5, 0.1, 0.1) +
  draw_plot(p1, 0.5, 0.5, 0.1, 0.1) +
  draw_plot(p1, 0.6, 0.5, 0.1, 0.1) +
  draw_plot(p1, 0.7, 0.5, 0.1, 0.1) +
  draw_plot(p1, 0.7, 0.4, 0.1, 0.1) +
  draw_plot(p1, 0.7, 0.3, 0.1, 0.1) +
  draw_plot(p1, 0.7, 0.2, 0.1, 0.1) +
  draw_plot(p1, 0.7, 0.1, 0.1, 0.1) +
  draw_plot(p1, 0.1, 0, 0.6, 0.5) # this is the big one

Сюжет

person JasonAizkalns    schedule 29.02.2016
comment
Большое спасибо за этот хороший ответ. Один из графиков, которые у меня есть, сделан не с помощью ggplot. Правда ли, что в таком случае я не могу использовать предложенный вами пакет? Или есть способ обойти это? - person user33125; 01.03.2016
comment
В зависимости от точного характера графика ggplot вам может быть лучше с library(grid) и library(gridExtra) -- подробнее см. здесь. Вы также можете рассмотреть пакет ggfortify. - person JasonAizkalns; 01.03.2016
comment
Большое спасибо @JasonAizkalns! В итоге я воспользовался предложением Батиста, но я помню ваш код, когда у меня есть ggplots, которые я хочу упорядочить по-другому! - person user33125; 01.03.2016