日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

直線とか曲線とか・その4

arrows関数をいじって、ちょっと関数を自作した話。
これは、有意差をつける折れ線が面倒だった日記を以前しましたが、本当に面倒でした。
で、こんなもの作ってた。

  • 有意差をつける折れ線
> sig_line <- function(x,y,h,star="*",...){
+ arrows(x0=x[1],y0=x[2],x1=x[1],y1=ifelse(x[2]>y[2],x[2]+h,y[2]+h),code=0)
+ arrows(x0=x[1],y0=ifelse(x[2]>y[2],x[2]+h,y[2]+h),x1=y[1],y1=ifelse(x[2]>y[2],x[2]+h,y[2]+h),code=0)
+ arrows(x0=y[1],y0=y[2],x1=y[1],y1=ifelse(x[2]>y[2],x[2]+h,y[2]+h),code=0)
+ text(x=x[1]+abs(x[1]-y[1])/2,y=ifelse(x[2]>y[2],x[2]+h,y[2]+h),labels=star,pos=3,...)
+ }
> 
> jpeg("sig_line.jpg")
> x <- sample(1:5,5,replace=TRUE)
> y <- sample(5:5,replace=TRUE)/20
> z <- barplot(x,main="sig_line",beside=TRUE,ylim=c(0,max(x+y)+2),col=gray(5:1/5))
> arrows(x0=z,y0=x+y,x1=z,y1=x-y,length=.05,angle=90,code=3)
> z <- cbind(z,x+y+.1)
> sig_line(x=z[1,],y=z[2,],h=.5,star="*",cex=2)
> sig_line(x=z[3,],y=z[5,],h=.5,star="**",cex=2)
> dev.off()

で、こんな感じ。

直線の関数は他にもあると思うけど、この辺をぐらいしか覚えられなかったな〜。