Jak Mogę uzyskać "niezrównoważoną" siatkę ggplotów?

Z grid.arrange mogę ułożyć wiele ggplot figur w siatce, aby uzyskać figurę wielokanałową, używając czegoś takiego jak:

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

Wygeneruj kilka wykresów ggplot2, a następnie

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

Jak mogę uzyskać' niezrównoważony ' układ 2 kol z jednym wykresem w całym pierwszym kol i trzema wykresami w drugim kol? W 2007 roku, w ramach projektu, w ramach projektu, zrealizowanego w ramach projektu, zrealizowano 100 projektów, w tym 100 projektów, w tym 100 projektów, 100 projektów, 100 projektów, 100 projektów, 100 projektów, 100 projektów, 100 projektów, 100 projektów, 100 projektów, 100 projektów, 100 projektów, 100 projektów i 100 projektów.]}

Błąd w arrangrob(..., as.table = as.table, clip = clip, main = main, : wejście musi być grobs!

Update:

Dzięki za radę. Przyjrzę się viewports i grid. W międzyczasie, dzięki @DWin, funkcja layOut w pakiecie 'wq' działała bardzo dobrze dla rysunku kompilacji w moim dokumencie Sweave: Tutaj wpisz opis obrazka

Aktualizacja 2:

Polecenie arrangeGrob (zgodnie z sugestią @baptiste) również działa dobrze i wydaje się bardzo intuicyjne-przynajmniej łatwo było zmienić szerokości dwóch kolumn. Ma również tę zaletę, że nie wymaga pakietu "wq".

Np. oto kod z mojego pliku 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}

Który daje następujące wyjście: Tutaj wpisz opis obrazka

BTW, ktoś mi powie dlaczego pojawia się ">NA"?

Author: markus, 2011-11-13

4 answers

grid.arrange rysuje bezpośrednio na urządzeniu; jeśli chcesz połączyć go z innymi obiektami siatki, potrzebujesz arrangeGrob, jak w

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

Edit (07/2015): z v > 2.0.0 możesz użyć argumentu layout_matrix,

 grid.arrange(p,p,p,p, layout_matrix = cbind(c(1,1,1), c(2,3,4)))
 73
Author: baptiste,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-26 10:12:49

Próbowałem rozgryźć go z grid i myślałem, że mam go w dół ,ale skończyło się niepowodzeniem (chociaż patrząc teraz na kod w funkcji cytuję poniżej, widzę, że byłem naprawdę blisko ... :-)

Pakiet ' wq ' posiada funkcję layOut, która zrobi to za Ciebie:

p1 <- qplot(mpg, wt, data=mtcars)
layOut(list(p1, 1:3, 1),   # takes three rows and the first column
        list(p1, 1, 2),    # next three are on separate rows
         list(p1, 2,2), 
          list(p1, 3,2))

Tutaj wpisz opis obrazka

 17
Author: IRTFM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-14 17:34:06

Inną alternatywą jest patchwork paczka Thomasa Lin Pedersena.

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

Wygeneruj kilka wykresów.

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))
/ Align = "left" /
p1 + (p2 / p3 / p4)

Tutaj wpisz opis obrazka

 2
Author: markus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-30 12:07:28

Jest również Pakiet multipanelfigure, który warto wspomnieć. Zobacz również tę odpowiedź .

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

Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką plików cookies.
 1
Author: Tung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 08:01:20