DATA MINING
Desktop Survival Guide by Graham Williams |
|||||
Fan Plot |
fan.plot<-function(x,edges=200,radius=1,col=NULL,centerpos=pi/2, labels=NULL,...) { if (!is.numeric(x) || any(is.na(x) | x<=0)) stop("fan.plot: x values must be positive.") # scale the values to a half circle x<-pi*x/sum(x) xorder<-order(x,decreasing=TRUE) nx <- length(x) if (is.null(col)) col<-rainbow(nx) else if(length(col) < nx) col<-rep(col,nx) oldpar<-par(no.readonly=TRUE) par(mar=c(0,0,4,0)) plot(0,xlim=c(-1,1),ylim=c(-0.6,1),xlab="",ylab="",type="n",axes=FALSE) lside<--0.8 for(i in 1:nx) { n<-edges*x[xorder[i]]/pi t2p<-seq(centerpos-x[xorder[i]],centerpos+x[xorder[i]],length=n) xc<-c(cos(t2p)*radius,0) yc<-c(sin(t2p)*radius,0) polygon(xc,yc,col=col[xorder[i]],...) if(!is.null(labels)) { xpos<-lside*sin(x[xorder[i]])*radius ypos<--i/10 text(xpos,ypos,labels[xorder[i]]) ytop<-cos(x[xorder[i]])*radius*radius segments(xpos,ypos+1/20,xpos,ytop) lside<--lside } radius<-radius-0.02 } } fan.plot(c(20,38,3,17)) |