Stephen Fewは最近、Edward Tufte のSparklinesの拡張であるBandlinesを導入しました。ggplot2 を使用してこれらの種類のプロットを作成する簡単な方法はありますか?
質問する
586 次
1 に答える
10
これは今月導入されたので、すでに実装されているとは思えません。しかし、コンセプトは単純に思えるので、かなり簡単に作成できます。これは、グラフィックを使用した非常に単純な実装base
です (私は の専門家ではありませんggplot2
)。
bandline<-function(x, low.col, high.col, axis=TRUE){
l <- max(unlist(lapply(x, length)), na.r=TRUE)
r <- range(unlist(x), na.rm=TRUE)
par(mfcol=c(length(x), 1))
for(i in 1:length(x)){
y <- boxplot.stats(x[[i]])
ifelse(i==1, par(mar=c(0,3,3,3)),
ifelse(i==length(x), par(mar=c(3,3,0,3)),
par(mar=c(0,3,0,3))))
plot(NA, axes=F, bty="n", xlim=c(1,l), ylim=r, xaxs="i")
rect(1,y$stats[2], l, y$stats[1], col="grey80", border=NA)
rect(1,y$stats[4], l, y$stats[2], col="grey60", border=NA)
rect(1,y$stats[5], l, y$stats[4], col="grey40", border=NA)
abline(h=y$stats[3],col="white", lwd=2)
lines(seq_along(x[[i]]), x[[i]])
zhigh <- zlow <- x[[i]]
zhigh[zhigh<=y$stats[5]]<-NA
zlow[zlow>=y$stats[1]]<-NA
points(seq_along(x[[i]]), zlow, bg=low.col, pch=21,cex=2)
points(seq_along(x[[i]]), zhigh, bg=high.col, pch=21, cex=2)
if(axis==TRUE){
axis(2, at=pretty(x[[i]]), las=2)
ifelse(i==1, axis(3, at=seq_len(l)),
ifelse(i==length(x),axis(1, at=seq_len(l)),""))
}
mtext(names(x)[i], side=4, srt=270, line=1)
}
}
そして、ここに例があります:
set.seed(1)
dat<-list(a=rnorm(100), b=rnorm(100), c=rnorm(100), d=rnorm(100))
bandline(dat, "black", "white", axis=FALSE)
于 2013-01-29T09:33:07.727 に答える