Как я могу получить «несбалансированную» сетку ggplots?

С помощью grid.arrange я могу расположить несколько ggplot figure in grid, чтобы получить многопанельную фигуру, используя что-то вроде:

library(ggplot2)
library(grid)
library(gridExtra)

сгенерируйте несколько графиков ggplot2, затем

plot5 <- grid.arrange(plot4, plot1, heights=c(3/4, 1/4), ncol=1, nrow=2)

Как я могу получить «несбалансированный» макет из двух столбцов с одним графиком во всем первом столбце и тремя графиками во втором столбце? Я поиграл с подходом «сетка сетки», пытаясь использовать grid.arrange для построения одной сетки (например, plot5, выше) против другого сюжета, но получено:

  

Ошибка вrangeGrob (..., as.table = as.table, clip = clip, main = main,:             вход должен быть гробом!

Update:

Спасибо за совет. Я посмотрю на viewports и grid. Между тем, благодаря @DWin, функция layOut в пакете 'wq' очень хорошо работала для фигуры компиляции в моем Sweave документ: введите описание изображения здесь

Обновление 2:

Команда arrangeGrob (как предлагает @baptiste) также работает хорошо и кажется очень интуитивно понятной - по крайней мере ее было легко изменить ширина двух столбцов. Он также имеет то преимущество, что не требует пакета `wq '.

например. Вот код из моего файла Sweave:

<<label=fig5plot, echo=F, results=hide>>=
plot5<-grid.arrange(plot4, arrangeGrob(plot1, plot2, plot3, ncol=1), 
                    ncol=2, widths=c(1,1.2))
@
\begin{figure}[]
    \begin{center}
<<label=fig5,fig=TRUE,echo=T, width=10,height=12>>=
<<fig5plot>>
@
\end{center}
\caption{Combined plots using the `arrangeGrob' command.}
\label{fig:five}
\end{figure}

который производит следующий вывод: введите описание изображения здесь

Кстати, кто-нибудь скажет мне, почему появляется> NA?

93 голоса | спросил user441706 13 72011vEurope/Moscow11bEurope/MoscowSun, 13 Nov 2011 18:26:25 +0400 2011, 18:26:25

3 ответа


0

grid.arrange рисует прямо на устройстве; если вы хотите объединить его с другими объектами сетки, вам нужно arrangeGrob, как в

 p = rectGrob()
 grid.arrange(p, arrangeGrob(p,p,p, heights=c(3/4, 1/4, 1/4), ncol=1),
              ncol=2)

Изменить (07/2015): с v> 2.0.0 вы можете использовать аргумент layout_matrix ,

 grid.arrange(p,p,p,p, layout_matrix = cbind(c(1,1,1), c(2,3,4)))
ответил baptiste 14 12011vEurope/Moscow11bEurope/MoscowMon, 14 Nov 2011 23:41:27 +0400 2011, 23:41:27
0

Другой альтернативой является patchwork Томас Лин Педерсен.

# install.packages("devtools")
# devtools::install_github("thomasp85/patchwork")
library(patchwork)

Создайте несколько графиков.

p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + facet_grid(rows = vars(gear))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars) + geom_bar(aes(carb))

Теперь расположите участки.

p1 + (p2 / p3 / p4)

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

ответил markus 30 Maypm18 2018, 15:07:28
0

Существует также многоканальный пакет . это стоит упомянуть. См. Также этот ответ .

 library(ggplot2)
theme_set(theme_bw())

q1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
q2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
q3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
q4 <- ggplot(mtcars) + geom_bar(aes(carb))

library(magrittr)
library(multipanelfigure)

figure1 <- multi_panel_figure(columns = 2, rows = 3, panel_label_type = "upper-roman")

figure1 %<>%
  fill_panel(q1, column = 1, row = 1:3) %<>%
  fill_panel(q2, column = 2, row = 1) %<>%
  fill_panel(q3, column = 2, row = 2) %<>%
  fill_panel(q4, column = 2, row = 3)
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'
figure1

Создано в 2018-07-16 с помощью пакета представительских файлов (v0.2.0.9000).

ответил Tung 16 J000000Monday18 2018, 11:01:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132