直線とか曲線とか・その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()
直線の関数は他にもあると思うけど、この辺をぐらいしか覚えられなかったな〜。