R で並べて箱ひげ図を作成する
この記事では、R で箱ひげ図を並べて作成する方法を紹介します。
R で par
関数を使用して並べて箱ひげ図を作成する
par
関数を使用して、グラフィカルパラメータを設定できます。引数なしまたは no.readonly = TRUE
を指定せずに関数を呼び出すと、すべてのグラフィカルパラメータが取得されます。この場合、mfrow
パラメーターを使用して、並べた箱ひげ図を作成します。mfrow
は c(nr, nc)
ベクトルで渡され、後続のプロットは nr
-by-nc
配列として描画されます。次のサンプルコードは、InsectSprays
データセットから 2つの箱ひげ図を作成します。ここで、count
列と spray
列はそれに応じてプロットされます。boxplot
関数の詳細なレビューはこの記事の範囲を超えていますが、ボックス本体の色を指定するには col
引数が必要です。最後の par(mfrow=c(1,1))
関数呼び出しを使用して、レイアウトをデフォルト設定にリセットしていることに注意してください。
par(mfrow=c(1,2))
boxplot(count ~ spray, data = InsectSprays, col = "pink")
boxplot(count ~ spray, data = InsectSprays, col = "yellow")
par(mfrow=c(1,1))
R で grid.arrange
関数を使用して並べて箱ひげ図を作成する
または、gridExtra
パッケージの grid.arrange
関数を使用することもできます。grid.arrange
は par
関数と同様に動作します。それでも、複数のプロット、特に ggplot
オブジェクトを使用すると、より柔軟で直感的になります。grid.arrange
は、開始引数として可変長の ggplot
オブジェクトを取ります。その後、オプションの引数、つまり、プロット用に作成する必要のある列の数を示す ncol
パラメーターを指定できます。次のコードスニペットは、2つのボックスプロットを並べて描画します。
library(ggplot2)
library(gridExtra)
plot1 <- ggplot(InsectSprays, aes(x = spray, y = count)) + geom_boxplot(fill = "pink")
plot2 <- ggplot(InsectSprays, aes(x = spray, y = count)) + geom_boxplot(fill = "yellow")
grid.arrange(plot1, plot2, ncol = 2)
grid.arrange
は、nrow
パラメータと ncol
パラメータの両方を使用して指定された 2 次元の分割ウィンドウを作成することもできます。ggplot
オブジェクトを組み合わせてリストにし、grobs = list(...)
引数の形式で渡すことができることに注意してください。次の例では、2 行 2 列の行列スタイルで 4つの箱ひげ図を出力します。
library(ggplot2)
library(gridExtra)
plot1 <- ggplot(InsectSprays, aes(x = spray, y = count)) + geom_boxplot(fill = "pink")
plot2 <- ggplot(InsectSprays, aes(x = spray, y = count)) + geom_boxplot(fill = "yellow")
plot3 <- ggplot(InsectSprays, aes(x = spray, y = count)) + geom_boxplot(fill = "orange")
plot4 <- ggplot(InsectSprays, aes(x = spray, y = count)) + geom_boxplot(fill = "cyan")
grid.arrange(plot1, plot2, plot3, plot4, nrow = 2, ncol = 2)
grid.arrange
関数のもう 1つの便利なパラメーターは、layout_matrix
です。これは、結合されたベクトルで指定されたカスタム構造に各プロットを配置します。この例では、非対称ウィンドウ構造で構築された 3つの異なるプロットオブジェクトを定義しています。上部に 2つのプロット、下部に 1つのプロットです。rbind
のベクトルの数はウィンドウの行に対応し、各オブジェクトの要素は、指定されたウィンドウの行を分割する部分の数を指定します。一方、番号は同じ順序で引数プロットに対応しています。2 番目の行のすべての分割ウィンドウが 3 番目のプロットで占められている場合、2 番目のベクトルのすべての要素の値は-3
である必要があります。
library(ggplot2)
library(gridExtra)
plot1 <- ggplot(InsectSprays, aes(x = spray, y = count)) + geom_boxplot(fill = "pink")
plot2 <- ggplot(mtcars, aes(x = mpg)) + geom_histogram(fill = "yellow", bins = 30)
plot3 <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point(fill = "orange")
grid.arrange(plot1, plot2, plot3, widths = c(2, 2, 1),
layout_matrix = rbind(c(1, 2, 2), c(3, 3, 3)))