RStudioを使ってグラフを描画しているときに、困ったことを記録しておきます。
ggplot2の"facet-wrap"を使ってグラフを描画して、ggsignifでp値を書き込んでいましたが、どうしても"p="を入れたくなってしまいました。
なかなか難しかったので、メモがてらに記録しておきます。
facet-wrapを使ったグラフにp値を書き込む
ggplot2のfacet-wrapとは、縦軸、横軸同じにして複数の条件のグラフを一気に表示できる便利な機能です。
このブログの中では、ImageJマクロを使った計数結果と、手動での計数結果に違いがあるのかを検討するためにfacet-wrapを使ったグラフを描画しました。
実際に出力できるグラフがこちら。
どうしても気に食わないのが、p値の表示方法。
数値だけじゃなくて、"p="って書きたい!
ggsignifでp値の表示を任意の文字列にする
ちょっと調べてみると、
どうやら"annotation"を使うと変更ができるようです。(CRAN ggsignifパッケージの紹介ページより)
少し試してみましょう。
まずfacet_wrapなしでggsignifを使う場合は、
特に何も指定しないとグラフの上にp値がそのまま表示されます。
好きな文字列を入れる場合には、"annotation"で挿入するようなので"annotation"の引数を"aaa"にして実行してみましょう。
p値に変わって"aaa"の文字列が表示されました。
"aaa"の代わりに"p < 0.001"に書き換えてみても...
きちんと表示されました。
一つのグラフに対しては、"annotation"を使うと任意の文字列にすることができることがわかりました。
では、facet-wrapを使ったグラフではどうでしょうか?
上のコードは、facet_wrapの左側のグラフに"aaa"、右側のグラフに"bbb"を表示させようと思って書いたコードです。
しかしながらエラーが出てしまい、グラフが表示されませんでした...
エラーの表示には「ベクトルが2個指定されているけど、1個しかダメだよ」のようなことが書いてあります。
"aaa"だけにしてもう一度実行してみると...
グラフは表示されますが、やりたいこととなんか違います。
どうやら"annotation"を使うと同じ文字列にしかできないようです...
"p="って入れるにはどうしたら良い?
どうしたら良いか、ネットで調べていると...
GitHubにこんなページを見つけました。
Custom annotations when using facets #23
このスレッドの中のコメントで、
こんなことができるよと描いてあったので、早速コードを見てみました。
どうやら、"annotation_df"というデータフレームを作っておくことがポイントみたいです。
"annotatio_df"の中身は言うと...
"clarity"でグループの名前、cutとxminでどの群とどの群を比較しているのか?、"annotations"でp値に相当する挿入したい文字列、y_positionで高さを指定しています。
これを真似て、データフレームを作ってみましょう。
グラフを書いてみると...
"aaa"や"bbb"のところを自由に変えられるのが分りました。
"geom_signif"の中身を詳しく見てみると...
"data"の引数は、先ほど作った"pval_df_1"、"aes()"の中の"annotation"に挿入する文字列、"xmin"に片方比較する群、"xmax"にもう片方の比較する群、"y_position"に文字を入れる高さを指定しています。
"aaa"にコントロール群での比較、"bbb"に薬剤A処理群での比較の結果を"p="を足して表示させてみます。
まずは、"pval_df_1"の中身を更新しましょう。
更新した、"pval_df_1"を使って先ほどのコードを実行してみると...
やりたかったことができました!
ちなみに...変数"cpval"、"tpval"の中身の準備は、
と言う手順で、値を丸めて、"paste0"関数で"p="をくっつけています。