94

を使用すると、次のようなものを使用して、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)

最初の列全体に1つのプロットがあり、2番目の列に3つのプロットがある、「不均衡な」2列のレイアウトを取得するにはどうすればよいですか?grid.arrangeあるグリッド(たとえばplot5、上記)を別のプロットに対してプロットするために使用することで、「グリッドオブグリッド」アプローチを試してみましたが、次のようになりました。

ArrangeGrob(...、as.table = as.table、clip = clip、ma​​in = main、:入力はgrobsである必要があります!のエラー

アップデート:

アドバイスありがとうございます。調べてみviewportsますgrid。それまでの間、@ DWinのおかげで、「wq」パッケージの関数は、私のドキュメント layOutのコンパイル図に対して非常にうまく機能しました。Sweaveここに画像の説明を入力してください

アップデート2:

コマンド(@baptisteによって提案されたarrangeGrob)もうまく機能し、非常に直感的に見えます-少なくとも2つの列の幅を変更するのは簡単でした。また、「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」が表示されるのか誰か教えてください。

4

4 に答える 4

74

grid.arrangeデバイスに直接描画します。arrangeGrob次のように、必要な他のグリッド オブジェクトと組み合わせたい場合

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

編集(2015 年 7 月): v>2.0.0 では、layout_matrix引数を使用できます。

 grid.arrange(p,p,p,p, layout_matrix = cbind(c(1,1,1), c(2,3,4)))
于 2011-11-14T19:41:27.497 に答える
18

私は grid でそれを理解しようとしましたが、失敗したと思っていました (以下に引用する関数のコードを見ると、私は本当に近いことがわかります... :-)

「wq」パッケージには、layOutそれを行う機能があります。

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))

ここに画像の説明を入力

于 2011-11-13T17:55:16.753 に答える
2

もう 1 つの代替案は、patchworkThomas Lin Pedersen によるパッケージです。

# 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)

ここに画像の説明を入力

于 2018-05-30T12:07:28.433 に答える