コード
group<-c(10,20,30)
m.data<-c(0.079,0.102,0.146)
sd.data<-c(0.022,0.031,0.026)
yRoof=round(max(m.data+sd.data)*1.2, 1)
graph1<-barplot(m.data,names=group, ylim=c(0,yRoof),
xlab="Amount of drug (mg/kg)", ylab="Responses (/sec)",
col="royalblue3", space=0.5)
arrows(graph1,m.data,graph1,m.data+sd.data,angle=90,length=0.1,lwd=2)
arrows(graph1,m.data,graph1,m.data-sd.data,angle=90, length=0.1,lwd=2)
axis(side=1, graph1, labels=F)
title("Bar graph with error bars", cex =2)
segments(graph1[1], yRoof*0.8, graph1[2], yRoof*0.8,lwd=2)
points((graph1[1]+graph1[2])/2,yRoof*0.83, pch="*", cex=2)
segments(graph1[1], yRoof*0.9, graph1[3], yRoof*0.9,lwd=2)
points((graph1[1]+graph1[3])/2,yRoof*0.93, pch="*", cex=2)
コードの説明
データ入力
- 群は数でも文字でもかまわない。
- 表として表示するには、
group<-c(10,20,30)
m.data<-c(0.079,0.102,0.146)
sd.data<-c(0.022,0.031,0.026)
d.table<-data.frame(Group=group, Mean=m.data, SD=sd.data)
d.table
Group Mean SD
1 10 0.079 0.022
2 20 0.102 0.031
3 30 0.146 0.026
棒グラフの準備
- エラーバーを描くために、先にy軸の最大値を設定すると便利。
- yRoof=round(max(m.data+sd.data)*1.2, 1)
- 各群ごとに平均値に標準偏差を足し、その中から最大値をmax()で探して、1.2倍してround()で少数一桁を四捨五入。
- 小数点一桁で四捨五入する round(x, 1)
- 最小値が固定(=0)でない場合、同様に最初に指定すると便利。
- 例)yFloor=round(min(m.data-sd.data)*1.3,1)
- エラーバーをあえてy軸枠外に突き抜けて描きたい場合、par(xpd=T) をarrows()の前に入力し、枠外への書き込みを許可する。
棒グラフ bargraph()
- graph1<-barplot(height=m.data, names=group, ylim=c(0,yRoof))
- graph1に代入することで、x軸上の各棒の真ん中の値が得られる。これをエラーバーの作図に利用する。
- barplot()で設定できるプロパティ
height |
第一引数。各棒の高さを指定する。一番目に指定したベクトルが自動的に使われる。 |
names |
各棒のラベルを指定する。数字でも文字でも可。 |
ylim |
縦軸を c(最小値, 最大値)で指定する。指定しないとheightから適宜計算される。 |
xlab, ylab |
軸名を指定。サイズはcexで指定。*1 |
col |
棒の色を指定。エクセルっぽい青 col="royalblue3"、エクセルっぽい赤 col="brown3" |
weight |
第二引数。各棒の幅を指定する。指定しない場合、等分幅になる |
space |
棒の間隔を指定。space=c(0.5, 0.8)とすると間隔の1番目から順番に幅を指定。*2 |
- 注意
- graph1<-barplot(m.data, group, ylim=c(0,yRoof))とnamesを指定しないで二番目にベクトルを指定すると、weightとして認識され、幅の異なるグラフになる。
yaginogogo.hatenablog.jp
エラーバーを描く
- arrows(x0, y0, x1, y1)は指定された点A(x0,y0)から点B(x1,y1)へ矢印を描く。
- arrowsの例
plot(3,3, xlim=c(0,5),ylim=c(0,5))
arrows(0,0,3,3)
angle |
矢印先端の角度。90でフラットになる。初期値は30 |
length |
矢印先端の長さ。単位はインチ、初期値は0.25 |
lwd |
矢印の線の太さ。初期値は1 |
lty |
線の種類。初期値は1(実線)、2~6が点線、0は線なし |
- これを使って、棒の端・中央を点Aとし、そこから上に標準偏差だけ離れた点Bに矢印を描き、矢印の先端を90度に指定するとエラーバーになる。
arrows(graph1, m.data, graph1, m.data + sd.data, angle=90,length=0.1,lwd=2)
- barplot()を代入したgraph1は、各棒の中央にあたるx座標を返してくれる。(Rがグラフを描くために設定した値)
- この値を矢印のx座標とし、y座標には棒の高さであるm.dataと、m.dataにエラーバーの長さであるsd.dataを加えた値を指定する。
群 |
点A x0 = 点B x1 |
点A y0 |
点B y1 |
group |
graph1 |
m.data |
m.data+sd.data |
10 |
1.0 |
0.079 |
0.101 |
20 |
2.5 |
0.102 |
0.133 |
30 |
4.0 |
0.146 |
0.172 |
- 下向きの矢印は同様に平均値m.dataから標準偏差sd.dataを引いた点Bにむかって矢印を引く。
arrows(graph1, m.data, graph1, m.data - sd.data, angle=90,length=0.1,lwd=2)
目盛り付きx軸を描く
- axis(side=1, graph1, labels=F)
- side=1がグラフ底辺をさす。
- 目盛りの値にbargraph()を代入したgraph1を指定することで、棒の中央に目盛りがつく
- 注意
- labels=Tにするとgraph1の数値が表示される。
タイトルを書く
- title(main="title")
- 文字サイズは cex = 1 がデフォルト。2にすると2倍に拡大される。subで下にサブタイトル。
有意差のマークをつける
segments(graph1[1], yRoof*0.8, graph1[2], yRoof*0.8,lwd=2)
points((graph1[1]+graph1[2])/2,yRoof*0.83, pch="*", cex=2)
- segment()は点A(x0,y0)から点B(x1,y1)に線を引く。
- point()は点(x,y)に記号(pch)を描く。
- xの値はgraph1に代入された各棒の中央の値をつかう。
- yの値はグラフ天井からの相対値 yRoof*0.8 で出すか、エラーバーの最大値との相対値でだす。
- 例)max(m.data+sd.data)*1.2
yaginogogo.hatenablog.jp