ggplot2はstat_functionコマンドで統計情報を図に追記することができます。stat_functionコマンドでも多くの作業が可能ですが、簡単にスプライン補間、カーネルによる推定、2変数の密度分布を追記できるパッケージの紹介です。
なお、ggplot2を並べてプロットするときには「grid」パッケージを利用することが多いと思います。データ範囲が異なるプロットでは図の高さや幅が揃わない場合があります。そんな時は「cowplot」パッケージを利用してみてはいかがでしょうか。
・Rで解析:ggplot2の体裁を整える!「cowplot」パッケージ
https://www.karada-good.net/analyticsr/r-102/
パッケージバージョンは2.13。実行コマンドはR version 4.2.2で確認しています。
パッケージのインストール
下記、コマンドを実行してください。
#パッケージのインストール install.packages("ggalt")
実行コマンド
詳細はコメント、パッケージのヘルプを確認してください。
[code language="R"] #パッケージの読み込み library("ggalt") #tidyverseパッケージがなければインストール if(!require("tidyverse", quietly = TRUE)){ install.packages("tidyverse");require("tidyverse") } #gridパッケージがなければインストール if(!require("grid", quietly = TRUE)){ install.packages("grid");require("grid") } ###データ例の作成##### n <- 10 TestData <- data.frame(Group = sample(paste0("Group", 1:4), n, replace = TRUE), Data1 = rnorm(n), Data2 = rnorm(n) + rnorm(n) + rnorm(n)) ####### #ポイントをスプライン補間で結ぶ:geom_xsplineコマンド #補間値を指定:spline_shapeオプション;値は-1から1の範囲 #プロットエリアの分割 grid.newpage() #分割内容の指定 pushViewport(viewport(layout = grid.layout(3, 2))) #ベース内容のプロット PointPlot <- ggplot(TestData, aes(x = Data1, y = Data2, group = Group, color = Group)) + geom_point() + labs(title = "Base Plot") #プロット print(PointPlot, vp = viewport(layout.pos.row = 1, layout.pos.col = 1)) ###スプライン補間を追加#### #描写列の設定 PosRow <- c(1, rep(2, 2), rep(3, 2)) #描写行の設定 PosCol <- c(2, rep(1:2, 2)) #スプライン値の設定 SplineValue <- seq(-1, 1, by = 0.5) #プロット for(i in seq(length(SplineValue))){ print(PointPlot + geom_xspline(spline_shape = SplineValue[i], size = 0.5) + labs(title = paste0("spline_shape: ", SplineValue[i])), vp = viewport(layout.pos.row = PosRow[i], layout.pos.col = PosCol[i])) } #カーネルによる推定:stat_bkdeコマンド #塗りつぶしのアルファ値:alphaオプション #平滑化パラメータ値:bandwidthオプション StatBk1 <- ggplot(TestData, aes(x = Data1)) + stat_bkde(alpha = 1, bandwidth = 0.25) + labs(title = "alpha = 1, bandwidth = 0.25") StatBk2 <- ggplot(TestData, aes(x = Data1, fill = Group)) + stat_bkde(alpha = 0.5, bandwidth = 0.25) + labs(title = "alpha = 0.5, bandwidth = 0.25") #プロットエリアの分割 grid.newpage() #分割内容の指定 pushViewport(viewport(layout = grid.layout(2, 1))) #プロット print(StatBk1, vp = viewport(layout.pos.row = 1, layout.pos.col = 1)) print(StatBk2, vp = viewport(layout.pos.row = 2, layout.pos.col = 1)) #2変数の密度分布:stat_bkde2dコマンド StatBk2d1 <- ggplot(TestData, aes(x = Data1, y = Data2, group = Group, color = Group)) + geom_point() + stat_bkde2d(bandwidth = c(0.3, 2)) + labs(title = "stat_bkde2d") StatBk2d2 <- ggplot(TestData, aes(x = Data1, y = Data2, group = Group, color = Group)) + geom_point() + stat_bkde2d(bandwidth = c(0.3, 2), aes(fill = ..level..), geom = "polygon") + labs(title = "stat_bkde2d fill") #プロットエリアの分割 grid.newpage() #分割内容の指定 pushViewport(viewport(layout = grid.layout(2, 1))) #プロット print(StatBk2d1, vp = viewport(layout.pos.row = 1, layout.pos.col = 1)) print(StatBk2d2, vp = viewport(layout.pos.row = 2, layout.pos.col = 1)) [/code]
出力例
・geom_xsplineコマンド
・stat_bkdeコマンド
・stat_bkde2dコマンド
少しでも、あなたのウェブや実験の解析が楽になりますように!!