見出し画像

【R言語】ggplot2|ドットプロットを描く

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

前回までは、平均値と標準偏差を使って棒グラフとエラーバーをつけました。

Nature, Cell, Science系の論文ではデータを一つ一つ表示することを要求されるようになりました。

今回は、棒グラフに重ねるためのドットプロットを描いてみようと思います。

ggplot2でドットプロットを描画するのに参考にしたサイトはこちら。

ggplot2でとりあえずプロットを描いてみる

ggplot2の特徴として、グラフをレイヤーを重ねるように描いていくので一つ一つのステップごとに描いているグラフを確認できます。

今回も前回と同様に一つ一つ確認しながらコードを書いていきたいと思います。

使うデータは前回と同様です。

元のデータはこちら↓

画像1

今回はこの生データ(rawdata)を使ってプロットしていきます。

生データ(rawdata)の取り込みは前回記事を参照してみてください。おさらいとして下にも示しておきました。

> setwd("~/R/data_frames") #呼び出すディレクトリを指定する
> #作ったcsvファイルを取り込む
> rawdata<- read.csv("xtreatment.csv",header=T)
> head(rawdata)
 treatment value
1   placebo  4.02
2   placebo  3.75
3   placebo  3.68
4    xtreat  5.23
5    xtreat  6.12
6    xtreat  5.79

前回までは”expression level of proteinA”としていたところを今回からvalueにしています。(名前が長すぎるとコードを書くのが大変だということを学びました...)

次に、ggplot2とdplyrを呼び出しておきます。(もしかしたらdplyrの呼び出しは不要かもしれません)

> #グラフを描くときは毎回実行する
> library(ggplot2) #論文用のグラフを作るのに良い
> library(dplyr) #"%>%"というパイプコードが使えるようになる

まずは、"ggplot"を使って使うデータやX軸Y軸をどうするかを指定していきます。

> dp1<-ggplot(rawdata, #データの定義
           aes(x= treatment,  #xはtreatment
               y= value, #y軸はvalue
               shape=treatment))  #マーカーの形はtreatmentによって分ける
> dp1
今回のポイントは、"shape=treatment(条件)"にしたところです。参考にしたブログでは、"colour=time(条件)"としていました。colourを変えることで条件によって○・●と変えたかったようなのですが、"colour"だったところを"shape"にすることで、できるようになりました。

dp1を実行すると、グラフのフレームが表示されます。

画像2

ドットプロットを描くときに使うのは"geom_point"ですが、これを使うとプロットが一直線に並んでしまいます。

データを一つ一つ見せる」という目的なので、今回は"geom_jitter"をつかってプロットを散らしていくことにします。

geom_jitterでプロットを散らす

geom_jitterで指定するのは、マーカーの大きさと散らばり具合です。

マーカーの大きさは"size"、散らばり具合は"width"で調整します。

散らばり方はグラフによって変わってくるので、プロットを実行しながら最適な散らばり方を検討するのがおススメです。(今回の場合はwidth=0.2が私好みでした)

書いたコードはこちら↓

> dp2<-dp1+
+   geom_jitter(size=2,width = 0.2) #点を散らばす,widthによって散らばり方を制御
> dp2

dp2を実行すると、

画像3

ばらついてるプロットが描画できました。実行するたびにばらつき方が違うので好みのバラツキを検討するのもアリかもしれません。

変数によってプロットマーカーを変える

参考にしていたブログの人も苦労していた部分です。変数によってプロットを変える場合には、"scale_shape_manual"で変更していきます。

もし、線の色を変えたい場合はshapeの部分をcolourに、塗りつぶしの色を変えたい場合はfillに変更すると自由に変えられることがわかりました。

では、コードを書いていきます。

> dp3<-dp2+
+   scale_shape_manual(values=c(16,1))  #変数によって点の形を変える
> dp3

"values"でマーカーの形をベクトルの形で指定します。16は●、1が○です。

他にもいろんな形が指定できるので、どんな形があるか見たい場合はこちらのサイトを見てみてください。

dp3を実行すると、

画像4

最後にグラフの体裁を整えていきます。Y軸が0から始まっていないのとか気になりませんか?

ggplot2でグラフの体裁を整え

最後に、Y軸を0殻にしたり、背景を白にしたり、軸の線を黒にしたりと体裁を整えてきます。

これは、棒グラフを描いた時と同じなのでコードと出力結果だけ示しておきます。

> dp4<-dp3+
+     scale_y_continuous(expand=c(0,0), #y軸を(0,0)から始める
+                        limits = c(0, ylim)) #y軸を0から最大値*1.5に変更
> dp5<-dp4+
+   labs(x="treatmnent", y="expression level") #X軸とY軸のラベルをつける
> dp6<-dp5+
+   theme_classic() #テーマはclassic
> dp6

画像5

これで、棒グラフに重ねるためのドットプロットが完成しました!

ggplot2では、平均値のところに線を引いたり、中央値だけ色を変えたり、エラーバーをつけたりいろいろできるようです。

今回の目的はあくまでも、棒グラフに重ねるためのドットプロットということでそんなことまではやりませんでした。遊んでみると楽しいかもしれませんね。

次回は、棒グラフとドットプロットを重ねてみようと思います。

それでは、また!


今回作った、ドットプロットのコードはこちら↓(事前にlibraryを使ってggplot2を呼び出しておきます)

> #データ1点1点を描画する
> dp1<-ggplot(rawdata, #データの定義
+             aes(x= treatment,  #xはtreatmentのfactorによって分ける
+                 y= value, #y軸はvalueの値を使う
+                 shape=treatment))  #マーカーの形はtreatmentによって分ける
> dp2<-dp1+
+   geom_jitter(size=2,width = 0.2) #点を散らばす,widthによって散らばり方を制御
> dp3<-dp2+
+   scale_shape_manual(values=c(16,1))  #変数によって点の形を変える
> dp4<-dp3+
+     scale_y_continuous(expand=c(0,0), #y軸を(0,0)から始める
+                        limits = c(0, ylim)) #y軸を0から最大値*1.5に変更
> dp4<-dp3+
+     scale_y_continuous(expand=c(0,0), #y軸を(0,0)から始める
+                        limits = c(0, ylim)) #y軸を0から最大値*1.5に変更
> dp5<-dp4+
+   labs(x="treatmnent", y="expression level") #X軸とY軸のラベルをつける
> dp6<-dp5+
+   theme_classic() #テーマはclassic
> dp6
> 

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