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")
実行コマンド
詳細はコメント、パッケージのヘルプを確認してください。
<pre class="wp-block-syntaxhighlighter-code">
#パッケージの読み込み
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 &lt;- 10
TestData &lt;- 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 &lt;- 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 &lt;- c(1, rep(2, 2), rep(3, 2))
#描写行の設定
PosCol &lt;- c(2, rep(1:2, 2))
#スプライン値の設定
SplineValue &lt;- 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 &lt;- ggplot(TestData, aes(x = Data1)) +
stat_bkde(alpha = 1, bandwidth = 0.25) + labs(title = "alpha = 1, bandwidth = 0.25")
StatBk2 &lt;- 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 &lt;- 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 &lt;- 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))
</pre>
出力例
・geom_xsplineコマンド

・stat_bkdeコマンド

・stat_bkde2dコマンド

少しでも、あなたのウェブや実験の解析が楽になりますように!!