見出し画像

【R言語】ggplot2を使って3群以上の比較グラフを作る③〜X軸の目盛を変数を使って変える〜

こんにちは。R言語をだんだんマスターしつつある生命科学系研究者のえいこです。

マスターすると言っても最終目標はNGS解析なのでまだまだ...

でもできることが増えてきて楽しくなってきています。

前回の記事ではグラフのX軸目盛りを変えるということをしてきました。が、毎回変数を作るのはめんどくさい!既にあるものから自動的に作れるようにならないものか?と試行錯誤してみました。

データから変数を作って、何もしなくてもgroupの名前になるように変更していきます。

引数breaks用の変数を準備する

引数のコードをもう一度見てみると...

breaks=c(“a”, “b”, “c”)

と、orderの文字列がアルファベット順に並んでいます。

これを既にある変数から取ってこられないか...と思いを巡らしていると...

あるじゃないですか!これ↓

画像1

グラフを書く前に作りました。記事のリンクを貼っておきます。

このdata.frameの一列目を上から順番に取ってきて、ベクトルに入れていく、つまりfor文を使えば書けそう。

と思って、書いたコードがこちら

Breaks<- c()
for (i in 1:nrow(data_mean_sd)){
 Breaks<- c(Breaks, as.character(data_mean_sd$order)[i])
}
Breaks

やっていることは、”data_mean_sd”のorderを抽出して並べているだけ。

引数labelsの変数を作る

labelsの引数は、

labels=c(“control”, “A”, “B”)

breaksと同じ要領でfor文を使って作っていきます。

Labels<-c()
for (i in 1: nrow(data_mean_sd)){
 Labels<- c(Labels, data_mean_sd$group[i])
}
Labels

BreaksとLabelsが思い通りのベクトルになっているか確認しましょう。

画像2

大丈夫そうですね。

変数に代入してX軸目盛りの変更ができるのか?

一番の心配はここ。

変数にできたのは良いけど、変数に入れたからX軸目盛りが変えられなかったらどうしよう...

まぁ、やってみるだけやってみましょう。

#prepare the graph field
graph<- ggplot(data=data_mean_sd,
              aes(x= order, 
                  y=mean)) 
#make the labels
graph<- graph+
 labs(x=xlab, y=ylab,
      shape="", fill="")+
 scale_y_continuous(expand = c(0,0), limits = c(0,ylim))+
 theme_classic()

#draw the plots
bar<-graph+
 geom_bar(
   aes(fill=order),
   stat="identity", 
   color="black",
   position="dodge"
 )+
 scale_fill_npg(labels=Labels)+
 geom_errorbar(
   errors,
   width=0.17
 ) +
 scale_x_discrete(breaks=Breaks,labels=Labels)
bar

“scale_fill_npg()”と”scale_x_discrete()”のところを変数に変えました。

実行!

画像3

できました。

見た目は前回と変わりませんが、変数で制御できるようになったのは凄いことです!!!

やったー。

次は、有意差検定の結果を”ggsignif”を使って入れていきます。

多群比較だからかなり複雑なことになりそうな予感...


それでは、また!

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