Rで解析:複数のggplotオブジェクトのプロットに便利です。「egg」パッケージ

Rの解析に役に立つ記事

複数のggplotオブジェクトのプロットするのに便利なパッケージです。特にデータを決まった様式で繰り返しプロットする場合に役に立つかと思います。なお、プロットのレイアウトを確認する「expose_layout」は便利だと思います。

パッケージバージョンは0.4.5。windows11のR version 4.2.2で確認しています。

スポンサーリンク
スポンサーリンク

パッケージのインストール

下記、コマンドを実行してください。

#パッケージのインストール
install.packages("egg")

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("egg")
#日付データの作成に便利:lubridateパッケージがなければインストール
if(!require("lubridate", quietly = TRUE)){
  install.packages("lubridate");require("lubridate")
}

###データ例の作成#####
set.seed(1234)
n <- 30
TestData <- tibble(Group = sample(paste0("Group", 1:5), n, replace = TRUE),
                   Data1 = rnorm(n),
                   Data2 = rnorm(n) + rnorm(n) + rnorm(n),
                   Data3 = sample(0:1, n, replace = TRUE),
                   Data4 = sample(LETTERS[1:26], n, replace = TRUE))
########

###ggplot2のプロットデータを作成#####
#箱ひげ図
BoxPlot <- ggplot(data = TestData, aes(x = Group, y = Data1,
                                       fill = Group)) +
  geom_boxplot()
#散布図
PointPlot <- ggplot(data = TestData, aes(x = Data2, y = Data1,
                                         color = Group)) +
  geom_point() + ggtitle("TEST")
#棒グラフ
BarPlot <- ggplot(data = TestData, aes(x = Data4, fill = Data4)) +
  geom_bar() + guides(fill = "none")
#棒グラフをGroupで分割
FacetBarPlot <- ggplot(data = TestData, aes(x = Data4, fill = Data4)) +
  geom_bar() + facet_wrap(~Group, nrow = 1) + guides(fill = "none")
########

#グラフをまとめてプロット:grid.arrangeコマンド
#出力するグラフオブジェクトをlistで指定:grobsオプション
#グラフ横幅を指定:widthsオプション
#プロット分割の指定:layout_matrixオプション
grid.arrange(grobs = list(BoxPlot, PointPlot, BarPlot, FacetBarPlot),
             widths = c(1.5, 1),
             layout_matrix = rbind(c(1, 2), c(3, 3), c(4, 4)))

#グラフのレイアウトを確認:expose_layoutコマンド
#基本的なコマンドは下記の通り
#expose_layout(p, draw = TRUE, newpage = TRUE)
#lapplyコマンドで指定すると簡単です
#gridパッケージを読み込む
library("grid")
ExLapplyPlots <- lapply(list(BoxPlot, PointPlot, BarPlot, FacetBarPlot),
                           expose_layout, draw = FALSE, newpage = FALSE)
#内容をプロット
grid.arrange(grobs = ExLapplyPlots,
             widths = c(1.5, 1),
             layout_matrix = rbind(c(1, 2), c(3, 3), c(4, 4))
)

出力例

・grid.arrangeコマンド

grid.arrange

・expose_layoutコマンド

expose_layout

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました