2012年5月25日金曜日

Rで複数データの線グラフを書く

Rで、以下に示すように複数系列のカラフルな線グラフを書き、凡例をつける。
ページの最後にまとめてコピペできるテキストがあります。



データを用意する。
とりあえず、行列(マトリックス)を適当につくる。
data.l <- round(sin(seq(0,18*pi,length=90))*seq(1,3,1),digits=3)
data.m <- matrix(data.l, ncol=9, byrow=T)
> data.m
        [,1]   [,2]   [,3]   [,4]   [,5]   [,6]   [,7]   [,8]   [,9]
 [1,]  0.000  1.187  2.866  0.944  1.129 -0.106 -0.622 -1.930 -2.796
 [2,] -0.535  0.141  1.946  0.974  1.837  1.515 -0.106 -1.350 -2.944
 [3,] -0.904 -0.949  0.422  0.701  1.975  2.666  0.443 -0.351 -2.177
 [4,] -0.992 -1.744 -1.233  0.210  1.499  2.988  0.854  0.757 -0.734
 [5,] -0.772 -1.997 -2.505 -0.346  0.557  2.383  1.000  1.630  0.937
 [6,] -0.312 -1.630 -3.000 -0.794 -0.557  1.037  0.835  1.997  2.317
 [7,]  0.245 -0.757 -2.562 -0.996 -1.499 -0.631  0.411  1.744  2.977
 [8,]  0.726  0.351 -1.329 -0.889 -1.975 -2.103 -0.141  0.949  2.713
 [9,]  0.981  1.350  0.317 -0.505 -1.837 -2.921 -0.649 -0.141  1.606
[10,]  0.932  1.930  1.865  0.035 -1.129 -2.833 -0.955 -1.187  0.000
つくった行列をデータフレームにする。
data.df <- data.frame(data.m)
> data.df
       X1     X2     X3     X4     X5     X6     X7     X8     X9
1   0.000  1.187  2.866  0.944  1.129 -0.106 -0.622 -1.930 -2.796
2  -0.535  0.141  1.946  0.974  1.837  1.515 -0.106 -1.350 -2.944
3  -0.904 -0.949  0.422  0.701  1.975  2.666  0.443 -0.351 -2.177
4  -0.992 -1.744 -1.233  0.210  1.499  2.988  0.854  0.757 -0.734
5  -0.772 -1.997 -2.505 -0.346  0.557  2.383  1.000  1.630  0.937
6  -0.312 -1.630 -3.000 -0.794 -0.557  1.037  0.835  1.997  2.317
7   0.245 -0.757 -2.562 -0.996 -1.499 -0.631  0.411  1.744  2.977
8   0.726  0.351 -1.329 -0.889 -1.975 -2.103 -0.141  0.949  2.713
9   0.981  1.350  0.317 -0.505 -1.837 -2.921 -0.649 -0.141  1.606
10  0.932  1.930  1.865  0.035 -1.129 -2.833 -0.955 -1.187  0.000
行と列の値を定義する。
group <- paste("group",seq(1,9,1),sep=" ")
num <- seq(1,10,1)
> group
[1] "group 1" "group 2" "group 3" "group 4" "group 5" "group 6" "group 7" "group 8" "group 9"
> num
 [1]  1  2  3  4  5  6  7  8  9 10
データフレームに行と列の名前を与える。
colnames(data.df) <- group
rownames(data.df) <- num
> data.df
   group 1 group 2 group 3 group 4 group 5 group 6 group 7 group 8 group 9
1    0.000   1.187   2.866   0.944   1.129  -0.106  -0.622  -1.930  -2.796
2   -0.535   0.141   1.946   0.974   1.837   1.515  -0.106  -1.350  -2.944
3   -0.904  -0.949   0.422   0.701   1.975   2.666   0.443  -0.351  -2.177
4   -0.992  -1.744  -1.233   0.210   1.499   2.988   0.854   0.757  -0.734
5   -0.772  -1.997  -2.505  -0.346   0.557   2.383   1.000   1.630   0.937
6   -0.312  -1.630  -3.000  -0.794  -0.557   1.037   0.835   1.997   2.317
7    0.245  -0.757  -2.562  -0.996  -1.499  -0.631   0.411   1.744   2.977
8    0.726   0.351  -1.329  -0.889  -1.975  -2.103  -0.141   0.949   2.713
9    0.981   1.350   0.317  -0.505  -1.837  -2.921  -0.649  -0.141   1.606
10   0.932   1.930   1.865   0.035  -1.129  -2.833  -0.955  -1.187   0.000
色の種類と、色が出る順番を定義する。
color.set <- c(rgb(seq(1,0.5,-0.25),0,0),rgb(0,seq(1,0.5,-0.25),0),rgb(0,0,seq(1,0.5,-0.25)))
> color.set
[1] "#FF0000" "#BF0000" "#800000" "#00FF00" "#00BF00" "#008000" "#0000FF" "#0000BF" "#000080"
プロットする。matplot()なら複数の行を扱える。plotで上書きするより楽。
matplot(data.df,type="l",lty=1,lwd=3,col=color.set,ylim=range(-3,9))
凡例(レジェンド)に与える座標を定義する。
x.value <- 1
y.value <- 9
> x.value
[1] 1



> y.value
[1] 9
凡例を追加する。
legend(x.value,y.value,legend=group,lty=1,lwd=3,col=color.set)




以下を与えれば、まとめて実行できる。
data.l <- round(sin(seq(0,18*pi,length=90))*seq(1,3,1),digits=3)
data.m <- matrix(data.l, ncol=9, byrow=T)
group <- paste("group",seq(1,9,1),sep=" ")
num <- seq(1,10,1)
colnames(data.df) <- group
rownames(data.df) <- num
color.set <- c(rgb(seq(1,0.5,-0.25),0,0),rgb(0,seq(1,0.5,-0.25),0),rgb(0,0,seq(1,0.5,-0.25)))
matplot(data.df,type="l",lty=1,lwd=3,col=color.set,ylim=range(-3,9))
x.value <- 1
y.value <- 9
legend(x.value,y.value,legend=group,lty=1,lwd=3,col=color.set)

0 件のコメント:

コメントを投稿