読者です 読者をやめる 読者になる 読者になる

山羊の午後

研究関係の備忘録。

Rで描く、折れ線グラフ

とりあえずのR グラフ

基本の折れ線グラフ: plot(x,y, type="b")

f:id:yk_uminami:20160529202042p:plain

注意
plot()でマーカー付き折れ線グラフtype="b"を指定するとき、x軸データには数値ベクトルしか指定できない。
#データ入力
Elapsed.days<-c(1,2,3,4,5,8) #観察開始からの経過日数
weight<-c(10.2, 10.5, 10.2, 10.8, 11.9, 12.8) #体重

#マーカー付き折れ線グラフ
plot(Elapsed.days, weight, type="b",
     col="royalblue3", pch=15, cex=2, lwd=2, lty=1)
title("Simple line graph with markers")

plot()のプロパティ

type "b" で線+マーカー、"l"で線のみ、"p"でマーカーのみ
col 線とマーカーの色
pch マーカーの形 0=□、15=■
cex マーカーの大きさ
lwd 線の太さ
lty 線のスタイル 1=実線、2=点線

x軸に日付や文字列を使う

  • 数字に置き換えて入力し、あとからラベル表記を変更する。

f:id:yk_uminami:20160529210749p:plain

#データ入力
Elapsed.days<-c(1,2,3,4,5,8) #観察開始からの経過日数
weight<-c(10.2, 10.5, 10.2, 10.8, 11.9, 12.8) #体重

#折れ線グラフを描く
plot(Elapsed.days, weight, type="b",
     col="royalblue3", pch=15, cex=2, lwd=2, lty=1,
     xaxt= "n", xlab="") #x軸とx軸名を描かない。

#x軸の目盛りのみを描く
axis(side=1, labels=F)

#必要なラベルの数を確認
label.n<-length(axis(side=1,labels=F))
print(label.n)

#日付ラベルをつくる
start.day<-as.Date("2016/4/5")
day.names<-seq(start.day, start.day+label.n-1, 1)
#もしくは
# day.names<-as.Date(c("2016/4/5", "2016/4/6","2016/4/7","2016/4/8",
#          "2016/4/9","2016/4/10","2016/4/11","2016/4/12"))

#x軸を描く
axis(side=1, at=1:8, labels=format(day.names, "%m/%d")) 
title("Line graph with date labels", xlab="Date")
  • 注意 記録がない二日間(day 6,7 = 4/10, 4/11)を忘れないように。

使った関数

as.Date("X")
入力文字をデータ型Dateに変換する。入力形式はformat="%y/%m/%d"で指定できる。
seq(from,to,by)
fromからtoまで間隔byで連続ベクトルを作る。
format(a, "X")
データaを形式Xに変換する。形式例はhelp(strptime)に詳しい。



2群~n群の折れ線グラフ matplot(x, y, type="b")

  • matplot()はyに指定されたデータ表の列を群として描画する
    • plot()とおなじくxには数値データが必要

f:id:yk_uminami:20160529214110p:plain

#データ入力
Elapsed.days<-c(1,2,3,4,5,8) #観察開始からの経過日数
w.male<-c(10.2, 10.5, 10.2, 10.8, 11.9, 12.8) #体重
w.female<-c(9.2, 8.5, 8.2, 9.8, 10.2, 11.3) #体重

#2つのデータを列方向に連結
weight<-cbind(w.male,w.female)

#二群の折れ線グラフ
matplot(Elapsed.days, weight, type="b",
     col=c("royalblue3","brown3"), pch=c(15,0), cex=2, lwd=2, lty=1)

#凡例
legend("topleft", legend=c("Male", "Female"),
     col=c("royalblue3","brown3"), pch=c(15,0), lwd=2, lty=1)

#タイトル
title("Line graph with two groups")

データ表

cbind(w.male,w.female)
ベクトルを列方向に合体する
x y (weight)
Elapsed.days w.male w.female
1 10.2 9.2
2 10.5 8.5
3 10.2 8.2
4 10.8 9.8
5 11.9 10.2
8 12.8 11.3

パラメータ

  • 各パラメータの値1が群1に、値2が群2に適用される。値が群より少ない場合、先頭から値が繰り返される。

凡例

legend(場所x,y, legend=群名, 描画パラメータ)
描画パラメータにはmatplot()で指定した各群のパラメータをコピーする。群名の順番と、パラメータの順番が一致すること。
  • 場所の指定
    • 予約語で指定:相対的に場所を決めてくれるので、便利。
"topleft" "top" "topright"
中央 "left" "right" "center"
"bottomleft" "bottom" "bottomright"
    • 座標で指定: x座標, y座標 凡例の左上角が指定座標になる。凡例表示のサイズは描画ウィンドウのサイズから相対的に決まるので、座標を固定する場合、注意が必要。
  • グラフの枠外に凡例を描く:先に枠外の余白を定義してから、そこに描く指定をする。*1
    • par(oma=c(下, 左, 上, 右)):余白のサイズを指定
    • par(xpd=T):枠外への描画を許可。座標指定でx, y軸の延長線上で枠外を指定できるようになる。(例えばマイナス値)
  • 凡例を2列以上で表示する
    • ncol= 2 :凡例数を指定列数で分割して順に表示する。
    • horiz = T:凡例を列方向に並べる。ncolに優先する。

*1:一般化しづらいのでお薦めしない