見出し画像

【R言語】ggplot2|棒グラフ+ドットプロットのグラフにスターをつける

こんにちは。プログラミング超初心者のえいこです。

前回は、作成した棒グラフにドットプロットを重ね合わせるところまでやりました。

論文に載せられるグラフにするためには何か足りない...

そう、有意な差があるかどうかを示すスターが足りない!!

ということで、今回は棒グラフとドットプロットを重ね合わせたグラフにスターをつけていきたいと思います。

前回、棒グラフにスターをつけたときには"geom_signif"を使って簡単につけられました。

重ね合わせたグラフに"geom_sginif"で書き込むのは、私の能力では無理でした...

ということで、今回は色んな奮闘を割愛して「これでやったらうまくいった」というコードをご紹介しようと思います。

annotateでグラフに書き込むものを指定する

”geom_signif”はスターも線も込み込みの線だったのですが...

いろいろ試してみて"geom_signif"はうまく動かなかったので、今回は、

1. 線を引く
2. スターを書き込む
3. p値を書き込む

の3つのステップでコードを書いていくことにしました。

"geom_signif"を使って、うまくいかなかったという記事は近いうちに書こうと思っています。

ggplot2でグラフにいろいろ書き込む時には"annotate"

今回描き込んでいくのは全部"annotate"で書いています。

線を描くときには"segment"、文字を入れるときには"text"と指定すればOKです。

あとは、書き込む場所を指定するだけ。

今回は2群比較で書き込むものも少ないので、らくちんです。

スターの下の線を引く

今回書いたコードは、前回の棒グラフ+ドットプロットの続きです。

"bdp5"までで、こんなグラフを描いています。

画像1

このグラフに、スターを書くための線を引きます。

書いたコードはこちら↓

#有意差を示すスターをつけるよ
bdp6<-bdp5+
 annotate("segment", #グラフの中に線を書き入れるよ
          x=1.0,
          xend =2.0, #xの場所
          y=ylim*0.8,#高さを調節
          yend=ylim*0.8,
          size=0.5 #線の太さ
 )
bdp6

"annotate()"でグラフの中に何かを書き込むことを宣言します。

中の"segment"で「線を書き込む」ことを指示。

次の「x=1.0, xend=2.0」で横方向にどこからどこまで線を引くか、「y=ylim*0.8, yend=ylim*0.8」で縦方向にどこからどこまで線を引くかを指定しています。

どうやらX軸は、棒グラフの真ん中が整数になっていて左側から1.0, 2.0...となっているようです。

一回、

xmin=1.0,
xmax=2.0,
y=ylim*0.8

というのも試したのですが、

 警告メッセージ: 
Ignoring unknown aesthetics: xmin, xmax 

と言われて、使えませんでした。

bdp6を実行すると、

画像2

スターを書き込む

書いた線の上にスターを書き込んでいきます。

あらかじめ、ggolotでグラフを描く前にpの値の準備をしておく必要があります。pの値の準備のしかたはこちらの記事に書きました。

準備してい置くものは、

・pの生値
・p値も文字列にする

あとは、"annotate()"を使って書いていくだけ。

コードはこちら↓

bdp7<- bdp6+
 annotate("text",
          x=1.5,
          y=ylim*0.82,
          label=
            if(pvalue<0.001){
              "***"
            }else if(pvalue<0.01){
              "**"
            }else if(pvalue<0.05){
              "*"
            }else{
              "n.s."
            },
          size=7)
bdp7

書く場所を「x=1.5, y=ylim*0.82」で指定しています。

xの座標は、1.0と2.0の真ん中の1.5で良いと思いますが、yの高さはグラフを描きながら調整しましょう。

"label"で書き込む文字列を指定します。(If文が役に立ってる!!)

If文の作り方はこちらの記事にまとめています。

bdp7を実行すると...

画像3

もう、98%完成です!!

最後に、pの値を書き込む

最後に、pの値を書き込んでいきます。

書いたコードはこちら

bdp8<-bdp7+
 annotate("text", #グラフの中にテキストを入れるよ
          x=2.0, #xの場所
          y=ylim*0.84, #高さを調節
          label=p.pvalue, #書き入れる文字列
          fontface="italic", #書体はイタリックに変更
          size=3) #文字サイズ
bdp8

"fontface"で書体を指定できます。

bdp8を実行すると...

画像4

完璧!できました!

textは文字列の真ん中が指定した座標になるようですね。

でも?グラフの形が変わっています...

RStudioではplotの画面の大きさを調整すると、それに合わせてグラフのサイズが変わってしまうようです...

できるだけplot画面を自分が保存する画像サイズと同じ様なサイズ感にしておくと、コードの修正が少なくて良いかもしれません。

最後に、作ったグラフを忘れずに保存するコードを書いて終了です。

ggsave("xtreat_proteina.png", plot=bdp8, 
width=8.5, height = 8.48, units = "cm", dpi=100)

実際に保存した画像がこちら↓

画像5

Rでやりたかったことの一つが実現しました!!

次は多群比較とか、いろいろできるみたいなので挑戦してみようと思います。

最終目標はNGSみたいなデータを処理すること!(WindowsではなくてMacでやりたいところ...)

それでは、また!


今回書いたコードはこちら↓

#有意差を示すスターをつけるよ
bdp6<-bdp5+
 annotate("segment", #グラフの中に線を書き入れるよ
          x=1.0,
          xend =2.0, #xの場所
          y=ylim*0.8,#高さを調節
          yend=ylim*0.8,
          size=0.5 #線の太さ
 )
bdp6

bdp7<- bdp6+
 annotate("text",
          x=1.5,
          y=ylim*0.82,
          label=
            if(pvalue<0.001){
              "***"
            }else if(pvalue<0.01){
              "**"
            }else if(pvalue<0.05){
              "*"
            }else{
              "n.s."
            },
          size=7)
bdp7

bdp8<-bdp7+
 annotate("text", #グラフの中にテキストを入れるよ
          x=2.0, #xの場所
          y=ylim*0.84, #高さを調節
          label=p.pvalue, #書き入れる文字列
          fontface="italic", #書体はイタリックに変更
          size=3) #文字サイズ
bdp8


          
ggsave("xtreat_proteina.png", plot=bdp8, 
     width=8.5, height = 8.48, units = "cm", dpi=100)

最後までお読みいただきありがとうございます。よろしければ「スキ」していただけると嬉しいです。 いただいたサポートはNGS解析をするための個人用Macを買うのに使いたいと思います。これからもRの勉強過程やワーママ研究者目線のリアルな現実を発信していきます。