見出し画像

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

こんにちは。R言語を使って検定もやってくれてカッコいいグラフも描ける。こんなコードを目指して日々コツコツ勉強している生命科学系研究者のえいこです。

論文を見ると、あっこれRで書いているな!ってわかる様になってきて、トップラボになればなるほど、Rで解析したりMATLABを使って図を作っていたりするんだなーと言う印象も持ちはじめています。(私の方向性は間違っていない?)

私は何をしてきたと言うと、ggplot2を使って3群以上の棒グラフを書いていました。

なぜか書いた順番ではなくアルファベット順に書き換えると言うRの特性から描きたい順番を制御するために”order”と言う別のものを準備してグラフを書いていました。

でも、orderがX軸のラベル名になってしまって何のグラフだかわからなくなっています。

↓前回の記事で書いたものですが、左から”a”, “b”, “c”となっていて何のことかさっぱりわかりません。

画像1

今回は、この”a”, “b”, “c”を”control”, “A”, “B”に直していこうと思います。

どうしたら良いの?

変えたいのは良いけど、どうしたら変えられるのか検討があまりつかなかったので(ここが初心者...)、google先生に聞いてみることに...

でもどうやって検索すれば良いかわかりません。

とりあえず、「R ggplot2 X軸ラベル」と検索してみてもやりたいことを解説しているサイトがありませんでした。

と言うのも、「X軸ラベル」と「X軸目盛り」がそもそも間違っていました。

「軸ラベル」は軸の名前のこと。ここで言うと「group」や「order」に対応します。

“control”や”A”は「目盛り」に相当します。(言われてみればそうだった...)

と言うことで「R ggplot2 X軸目盛り 順番」で検索して、こちらのサイトにたどり着きました。

淡々と書いてあるので大した解説はないのですが、見てみると”scale_x_discrete()”で変更可能なようです。

scale_x_discreteを使ってX軸目盛を変更する

“scale_x_discrete”の引数はbreaksとlabels。

breaksで軸の目盛りの切り方を、labelsで目盛りの名前を指定できるようです。

今回の例で見てみると...

scale_x_discrete(breakes=c(“a”, “b”, “c”), labels=c(“control”, “A”, “B”))

を足すと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
graph<-graph+
 geom_bar(aes(fill=order), stat="identity", color="black", position="dodge")+
 scale_fill_npg()+
 geom_errorbar(
   errors,
   width=0.17
 ) +
  scale_x_discrete(breakes=c(“a”, “b”, “c”), labels=c(“control”, “A”, “B”))
graph

画像2

変えられました!


凡例の表記も変更する

X軸は変えられたのに凡例はそのままなのは少し変なので...変えていきましょう。

調べてみると、google翻訳された変な日本語のページに飛ばされてしまいますがやっていることはコードを見れば一目瞭然。

“scale_shape_”や”scale_fill_”のlabels引数を変更すれば良さそうです。

今は棒グラフの色を”scale_fill_npg()”で変更しているので、引数にlabelsを加えてこんなコードにします。

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

このコードを足して実行すると...

画像3

そもそも凡例いらないよって言う場合には、

theme(legend.position = 'none')

を足せばOKです。

これで軸ラベルは変更できるのはわかりましたが、これ、わざわざ手入力でやるのめんどくさくないですか?!

コードを書いて、自動的にやってくれたら楽ですよね?!

と言うことで、breaksとlabelsにあたる変数を作ることにしました。

次回は変数を使った軸目盛の制御をしていこうと思います。


それでは、また!


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