折れ線グラフ
折れ線グラフは lines(x, y, type=) 関数で作成する。x, yには数値ベクトルが入り、プロットする点の座標を指定する。それが線で結ばれて折れ線グラフになる。
type= 引数については以下のとおり。
type | description |
p | points。点のみ。 |
l | lines。線のみ。 |
o | overplotted points and lines 。点と線を重ねる。 |
b, c | 点と線の組み合わせ。"b"は線が点の背後になる。"c"は点がなくなる。 |
s, S | 階段で線を描く。小文字のときは水平線から、大文字のときは垂直線から。 |
h | ヒストグラムふうの垂線。 |
n | 点も線も描画しない。 |
lines( ) 関数はグラフに線の情報を加えるもので、グラフそれ自体を作るものではない。グラフをつくるには plot() 関数を使う。
plot()関数はデフォルトだと点のみを描画する。type="n"とオプションを指定すれば、プロット点や線なしで軸やタイトルを含めたグラフが作成できる。
以下にtypeオプションの例を示す。plot関数内でtype="n"としてからlines()関数で点と線の描画を指定する。
x <- c(1:5);
y <- x # create some data
par(pch=22, col="red") # plotting symbol and color
par(mfrow=c(2,4)) # all plots on one page
opts = c("p","l","o","b","c","s","S","h")
for(i in 1:length(opts)){
heading = paste("type=",opts[i])
plot(x, y, type="n", main=heading)
lines(x, y, type=opts[i])
}
plot関数内でtypeを指定せず、lines()関数で点と線の描画を指定する。
x <- c(1:5);
y <- x # create some data
par(pch=22, col="blue") # plotting symbol and color
par(mfrow=c(2,4)) # all plots on one page
opts = c("p","l","o","b","c","s","S","h")
for(i in 1:length(opts){
heading = paste("type=",opts[i])
plot(x, y, main=heading)
lines(x, y, type=opts[i])
}
赤いほうはplot関数内でtype="n"としたため、基本的に点が描画されない。 lines関数で点を描くオプション (type=p, o, b) のときのみ描かれる。
対して、青いほうは全て点を描画している。
以下、より複雑なグラフ。5つのオレンジの樹の成長を時間にそってプロット。それぞれの線が樹の種類をあらわす。データはOrangeデータセットから。
# 因子変数を数値変数にする。扱いやすいので。
Orange$Tree <- as.numeric(Orange$Tree)
ntrees <- max(Orange$Tree)
# x軸とy軸の範囲を取得する。
xrange <- range(Orange$age)
yrange <- range(Orange$circumference)
# プロット開始
plot(xrange, yrange, type="n", xlab="Age (days)",
ylab="Circumference (mm)" )
colors <- rainbow(ntrees)
linetype <- c(1:ntrees)
plotchar <- seq(18,18+ntrees,1)
# add lines
for (i in 1:ntrees) {
tree <- subset(Orange, Tree==i)
lines(tree$age, tree$circumference, type="b", lwd=1.5,
lty=linetype[i], col=colors[i], pch=plotchar[i])
}
# タイトルとサブタイトル
title("Tree Growth", "example of line plot")
# 凡例
legend(xrange[1], yrange[2], 1:ntrees, cex=0.8, col=colors,
pch=plotchar, lty=linetype, title="Tree")
# 同じグラフを matplot() 関数で。
mat <- matrix(0, nr=7, nc=5)
for (i in 1:ntrees) {
x <- subset(Orange, Tree==i)$circumference
mat[,i] <- x
}
mat
matplot(mat, type="b", col=colors, pch=plotchar, lty=linetype)
legend(x=1, y=200, 1:ntrees, cex=0.8, col=colors, pch=plotchar, lty=linetype, title="Tree")
# x軸がうまくかけない。matplotはx軸が因子 (グループとか) のときに使うのがいいだろう。x軸が数値 (連続変量) のときはplot() + lines()。