2016-02-29 5 views
2

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

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

enter image description here

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

par(mfrow=c(2,2)) 

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

+1

Обычно люди в конечном итоге, используя пакет 'gridExtra' для сложных макетов. 'grid.arrange' может быть полезна. – alistaire

ответ

4

попробовать это,

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) 

enter image description here

для реальных участков, попробуйте

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

или список ваших 16 участков (или сетки grobs),

enter image description here

+0

Приносим извинения за основной вопрос, но я не привык много работать с grobTree: если я хочу вставлять графики (например, l1, l2, l3 ... до l16) в эту структуру, как мне это сделать? Спасибо вам большое за ваш ответ. – user33125

+0

поместите grobs в 'list()' и передайте его как 'grobs =' в 'grid.arrange()' или просто передайте их один за другим в качестве неназванных аргументов, и '...' позаботится об этом. – baptiste

+0

Эй, баптист! Я закончил тем, что использовал ваш код. Большое вам спасибо за это! Однако у меня есть еще два вопроса: 1) есть ли способ сделать более мелкие участки большими, не меняя размер более крупного участка? 2) Есть ли способ иметь меньше белых промежутков между графиками? В любом случае: большое спасибо! – user33125

2

Вероятно, вы хотите извлечь размеры в какой-либо тип матрицы, но этот подробный способ поможет вам найти то, что происходит с точки зрения размера и места размещения, - уверен, что это обертка для 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 

Plot

+0

Большое спасибо за этот приятный ответ. Один из графиков у меня не сделан с ggplot. Верно ли, что в этом случае я не могу использовать пакет, который вы предложили? Или есть способ обойти это? – user33125

+1

В зависимости от точной природы графика 'ggplot' вам может быть лучше с' library (grid) 'и' library (gridExtra) '- [см. Это] (https://github.com/hadley/ggplot2/wiki/Mixing-ggplot2-graphs-with-other-graphical-output) для более подробной информации.Вы также можете рассмотреть пакет '' ggfortify' (https://cran.r-project.org/web/packages/ggfortify/index.html). – JasonAizkalns

+0

Большое спасибо @JasonAizkalns! Я закончил использовать Baptiste его предложение, но я помню ваш код, когда у меня есть ggplots, которые я хочу организовать по-другому! – user33125

 Смежные вопросы

  • Нет связанных вопросов^_^