Skip to content
Prev 178480 / 398502 Next

Bumps chart in R

Andreas Christoffersen wrote:
Hi Andreas,
Not too hard. Try this:

bump.plot<-function (y1,y2=NULL,top.labels=NULL,left.labels=NULL,
 right.labels=NULL,rank=TRUE,descending=TRUE,linecol=par("fg"),
 mar=c(2,2,4,2),...) {

 if(missing(y1))
  stop("Usage: spread.labels(y1,y2,labels,...)")
 ydim<-dim(y1)
 if(is.null(ydim) && is.null(y2))
  stop("y1 must be a matrix or data frame if y2 is NULL")
 oldmar<-par("mar")
 par(mar=mar)
 if(is.null(y2) && ydim[2] > 1) {
  y2<-y1[,2]
  y1<-y1[,1]
 }
 if(rank) {
  left.labels<-left.labels[order(y1)]
  right.labels<-right.labels[order(y1)]
  y1<-rank(y1)
  y2<-rank(y2)
  if(descending) {
   left.labels<-rev(left.labels)
   right.labels<-rev(right.labels)
   y1<-rev(y1)
   y2<-rev(y2)
  }
 }
 ny<-length(y1)
 plot(c(rep(1,ny),rep(2,ny)),c(rev(y1),rev(y2)),xlim=c(0,3),xlab="",ylab="",
  axes=FALSE,...)
 segments(rep(1,ny),y1,rep(2,ny),y2,col=linecol)
 text(0.8,rev(y1),left.labels,adj=1)
 text(2.2,rev(y2),right.labels,adj=0)
 par(mar=oldmar)
}
# use the above data
bump.plot(poor_1990,poor_2004,c("1990","2004"),countries,countries,
linecol=1:20,pch=16,main="Bumps plot")

Jim