【R言語】RStudioで棒グラフをかいてみたらエラーが出た
こんにちは。プログラミング超初心者のえいこです。
今回は今まで使ってきたデータを使って棒グラフをかいてみようと思います。
データの概要を見るために箱ひげグラフはかいています。でも、データを論文などで見慣れている棒グラフの形にしてみたい!
棒グラフかくの遅すぎじゃない?
Excelを使っていたら棒グラフなんて一発で書けるし、なんでそんな嫌厭していたのか...
それは、調べても調べても自分がやりたいようなグラフをかいているコードにたどり着けなかったから。
ライフサイエンス系の実験系であまりRを使われていないからか、1つの群に複数のデータがあって2つ以上の群の平均値を比較する棒グラフをかいているサイトが探しても見つからなかったのです。
そこで今回は、ネット上に転がっているコードを参考にしながら自分で棒グラフのコードを書いてみることにしました。
すると...はじめてのエラーが...
プログラミング超初心者がどう対応したのか...まさに今回は奮闘記となっています。
ちなみに、今回も前回までと同様のデータを使っています。
Rで棒グラフをかいているサイトを調べてみる
今までもそうだったのですが、自分がやりたいことをやっていてコードを公開してくれているサイト様を検索してみます。
googleで「R 棒グラフ」で検索して一番上からサイトをみてみて自分がやりたいことをやっているかどうかを見極めます。
上位に表示されていた、「データ科学便覧」「Rjpwiki」とかは情報量はものすごい多くて、Rでこんなことできるの?!と思う反面、私がやりたいこととちょっと違う...という感じになっていました。
今回参考にさせていたただいたのは、はすさんの個人ブログ「山羊の午後 Rで描く、棒グラフ」です。
情報量が絞られていてとても分かりやすい!早速はすさんのコードを参考に棒グラフをかいてみようと思います。
サイトを参考にしながら棒グラフを書いてみよう
棒グラフをかく関数は"barplot()"。Rで棒グラフをかくときに必要な情報は各グループの平均値と標準偏差(エラーバーを書くときには必要)。
まずは、データを入力します。はすさんのブログでは、各群の名前、平均値、標準偏差を変数に代入することから始まります。
> #まずはデータを入力するところから
> group<-c(placebo, xtreat) #群の指定
> m.data<-c(mean(placebo),mean(xtreat)) #平均値の指定
> sd.data<-c(sd(placebo),sd(xtreat))
このコードは、"placebo" "xtreat"と言う変数にすでにデータが入っている前提です。
データをベクトルの形に変数に代入する方法や各要素の平均、標準偏差の計算についてはこちらをご覧ください。
次にy軸の最大値を指定します。
> #y軸の最大値を決めておく
> yRoof=round(max(m.data+sd.data)*1.2,1)
はちさんのコードを丸写し。
では、最後に棒グラフを書いて実行してみましょう!
> #棒グラフをかく
> bargraph<-barplot(m.data,names=group,ylim=c(0,yRoof),
ylab="expression level",space=0.5)
barplotの関数は、データセット、データの名前、y軸の指定、y軸ラベルを順に指定していきます。"space"という引数は棒と棒の間隔を指定できます。
※X軸のラベルや色の指定は割愛しています
すると...
barplot.default(m.data, names = group, ylim = c(0, yRoof),
ylab = "expression level", でエラー:
名前の数が誤りです
はじめてのエラー...
エラーをどう解決するか?
ネットで調べても、同じようなことをしている人がいないのでエラーの対処法もわからず。途方に暮れてしまったので、プログラミングが得意な夫に相談してみました。
そういうときは、一個一個やっていくんだよ。
ということで、一個一個コードを確認していきます。
> graph1<-barplot(m.data)
だけ、入力すると...
データを入れるだけで、結構棒グラフって書けるもんなんですね。
次にのコードを確認!
> graph1<-barplot(m.data,names=group)
barplot.default(m.data, names = group) でエラー: 名前の数が誤りです
y軸が消えてしまいました..."names"にエラーがあることが発覚
他にもエラーがないか確認してみます。
> graph1<-barplot(m.data,ylim = c(0, yRoof))
これも問題なさそう。次にに行きます。
> graph1<-barplot(m.data,ylim = c(0, yRoof),ylab = "expression level")
これも問題なく表示されました。ということで、問題は"names=group"の部分だということがわかりました。
では、変数groupにはどんなものが入っているのでしょう?
> group
[1] 4.02 3.75 3.68 5.23 6.12 5.79
全部のデータが連結された形で入っているようです。っていうか、数値データ...数値データじゃなくて群の名前を入れたいので、文字列にしなきゃですね。
> graph1<-barplot(m.data, names = c("placebo","xtreat"),
ylim = c(0, yRoof), ylab = "expression level")
に変えて、実行すると...
できたー!!
あとはX軸がないのが気になるのでX軸の線を追加しておきます。
> #X軸を書く
> axis(side=1,graph1,labels = F)
"axis"は軸を書く関数で、sideでどこに軸を引くかを決められます。sideは前回の"mtext"関数と同様に、side=1で下、side=2で左、side=3で上、side=4で右を指定します。前回の記事はこちら。
labelsという引数をF(FALSE)にすると目盛りは書かれなくなります。
次はこの棒グラフにエラーバーをつけて、アスタリスクまで入れようと思います。
それでは、また!
最後までお読みいただきありがとうございます。よろしければ「スキ」していただけると嬉しいです。 いただいたサポートはNGS解析をするための個人用Macを買うのに使いたいと思います。これからもRの勉強過程やワーママ研究者目線のリアルな現実を発信していきます。