【R言語】ggplot2を使って3群以上の比較グラフを作る③〜X軸の目盛を変数を使って変える〜
こんにちは。R言語をだんだんマスターしつつある生命科学系研究者のえいこです。
マスターすると言っても最終目標はNGS解析なのでまだまだ...
でもできることが増えてきて楽しくなってきています。
前回の記事ではグラフのX軸目盛りを変えるということをしてきました。が、毎回変数を作るのはめんどくさい!既にあるものから自動的に作れるようにならないものか?と試行錯誤してみました。
データから変数を作って、何もしなくてもgroupの名前になるように変更していきます。
◇
引数breaks用の変数を準備する
引数のコードをもう一度見てみると...
breaks=c(“a”, “b”, “c”)
と、orderの文字列がアルファベット順に並んでいます。
これを既にある変数から取ってこられないか...と思いを巡らしていると...
あるじゃないですか!これ↓
グラフを書く前に作りました。記事のリンクを貼っておきます。
この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が思い通りのベクトルになっているか確認しましょう。
大丈夫そうですね。
◇
変数に代入して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()”のところを変数に変えました。
実行!
できました。
見た目は前回と変わりませんが、変数で制御できるようになったのは凄いことです!!!
やったー。
◇
次は、有意差検定の結果を”ggsignif”を使って入れていきます。
多群比較だからかなり複雑なことになりそうな予感...
それでは、また!
最後までお読みいただきありがとうございます。よろしければ「スキ」していただけると嬉しいです。 いただいたサポートはNGS解析をするための個人用Macを買うのに使いたいと思います。これからもRの勉強過程やワーママ研究者目線のリアルな現実を発信していきます。