こにしき(言葉・日本社会・教育)

関西学院大学(2016.04~)の寺沢拓敬のブログです(専門:言語社会学)。

表(行列)を折れ線グラフにするR関数

追記

これ用に matplot() という関数がデフォルトであるそうです...orz
以下の自作関数は、「回りくどいことがむしろ大好き!」という奇特な方だけお使い下さい。


    *  *  *


「誰が使うんだよ、こんな関数!」のコーナー。
何かパーセンテージの推移を集計した表が手にはいるってことありますよね(あるある!)。
行・列がたいして多くない場合にはそのまま数値を読んだり棒グラフで表現すればOKですが、膨大な量になるとざっと見て理解するのは難しいものです。
そんなときに、概略をつかむのに「折れ線グラフ」は丁度いいんですが、Rでは結構ステップを踏まないと出力できません。なので、それを一括で出力できる関数を作りました。
イメージは、MSエクセルの折れ線グラフです。まあ、自分用ということで。

BODY

### table2lplot()
### Convert a matrix into a line graph

table2lplot <- function(X){

 plot(0,0,type="n",ylab="",xlab=""
      ,xlim=c(1,nrow(X))
      ,ylim=c(min(X),max(X))
      ,axes=F)
 axis(1,c(1:nrow(X)),rownames(X) )
 axis(2,seq(min(X),max(X),round((max(X)-min(X))/5)) , las=2)

 for(i in 1:ncol(X)){
   points(X[,i],type="b",pch=letters[i],lty=i)
     }

# Legend
 lgnd <- colnames(X) 
  names(lgnd) <- letters[1:ncol(X)]
  print(lgnd)
}

USAGE

table2lplot(X)   # "X" is a matrix.


行がX軸、列がY軸に指定していますので、逆の場合は 転置関数 t() なんかをかまして下さい。


Example

> a <- c(45,50,55,60,65,70) 
>  a1 <-rbind(a,jitter(a,5),5+jitter(a,5))>
>  A <- rbind(a1,jitter(a1))
>  rownames(A) <- seq(1950,2000,10)
>  colnames(A) <- c("牛","虎","兎","蛇","馬","羊")
>
> round(A,1)
       牛   虎   兎   蛇   馬   羊
1950 45.0 50.0 55.0 60.0 65.0 70.0
1960 44.6 53.0 52.4 62.3 69.1 68.3
1970 54.2 53.6 55.8 65.0 66.5 77.4
1980 45.0 50.0 55.0 60.0 65.0 70.0
1990 44.6 53.0 52.4 62.3 69.1 68.3
2000 54.2 53.6 55.8 65.0 66.5 77.4
>
> 
> table2lplot(A)
   a    b    c    d    e    f 
"牛" "虎" "兎" "蛇" "馬" "羊"