С помощью grid.arrange
я могу расположить несколько ggplot
фигур в сетке, чтобы получить фигуру из нескольких панелей, используя что-то вроде:
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
, выше) против другого графика, но получил:
Ошибка в аранжировкеGrob (..., as.table = as.table, clip = clip, main = main,: input must be grobs!
Обновить:
Спасибо за совет. Я изучу 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'?
grid.arrange
возможно, это окажется недостаточно гибким (поисковый стек для "[r] grid viewport")grid
. См. Также книгу Хэдли ggplot2, раздел 8.4.2.grid.arrange
можно использовать с вложенными окнами просмотра, используя его сопутствующийarrangeGrob
объект (по существу возвращающий agTree
), как в примере, который я привел ниже.plot5
не требуется, так какgrid.arrange
ничего не возвращает (NULL). Если вы хотите сохранить получившийся grob, используйте егоarrangeGrob
снова (иgrid.draw
отобразите его).Ответы:
grid.arrange
рисует прямо на устройстве; если вы хотите объединить его с другими объектами сетки, которые вам нужныarrangeGrob
, как вИзменить (07/2015): с v> 2.0.0 вы можете использовать
layout_matrix
аргумент,источник
cbind(c(1,1,1), c(2,3,4))
матрица описывает расположение фигур?Я попытался выяснить это с помощью сетки и подумал, что у меня это получилось, но в конечном итоге это не удалось (хотя теперь, глядя на код в функции, которую я цитирую ниже, я вижу, что я был действительно близок ... :-)
В пакете wq есть
layOut
функция, которая сделает это за вас:источник
g1
,g2
и т. д., чтобы все былоp1
?Другой альтернативой является
patchwork
пакет Томаса Лина Педерсена.Создайте несколько сюжетов.
А теперь оформляйте участки.
источник
Также стоит упомянуть пакет multipanelfigure . См. Также этот ответ .
Создано 16.07.2018 пакетом REPEX (v0.2.0.9000).
источник