Path: blob/master/sandbox/symposium2013/R/chart.UnStackedBar.R
1433 views
chart.UnStackedBar <- function(w, colorset=1:NROW(w), rotate=c("vertical", "horizontal"), yaxis=TRUE, equal.line=FALSE, las=par(las), ...)1{2# Weights should come in as:3# Convertible Arbitrage CTA Global Distressed Securities4# 2000-01-01 0.02500000 0.14601749 0.02500005# 2001-01-01 0.15785710 0.19577551 0.02500006# 2002-01-01 0.24431295 0.02500000 0.02500007# 2003-01-01 0.21955470 0.06590151 0.025000089# if (wrap)10# row.names = sapply(rownames(object), function(x) paste(strwrap(x, wrap.rownames), collapse = "\n"), USE.NAMES = FALSE)11rotate = rotate[1]12if(is(w, "xts"))13row.names=index(w)14else15row.names = sapply(rownames(w), function(x) paste(strwrap(x,10), collapse = "\n"), USE.NAMES=FALSE)16if(rotate=="vertical"){17par(oma = c(4,8,2,1), mar=c(0,1,0,1)) # c(bottom, left, top, right)18layout(matrix(c(1:NCOL(w)), nr = 1, byrow = TRUE))19for(i in 1:NCOL(w)){20if(i==1){21barplot(w[,i], col=colorset[i], horiz=TRUE, xlim=c(0,max(w)), axes=FALSE, names.arg=row.names, las=las,...)22abline(v=0, col="darkgray")23if(equal.line)24abline(v=1/NROW(w), col="darkgray", lty=2)25axis(1, cex.axis = 1, col = "darkgray", las=las)26mtext(colnames(w)[i], side= 3, cex=0.8, adj=0.5)27}28else{29barplot(w[,i], col=colorset[i], horiz=TRUE, xlim=c(0,max(w)), axes=FALSE, names.arg="", ylab=colnames(w)[i], ...)30abline(v=0, col="darkgray")31if(equal.line)32abline(v=1/NROW(w), col="darkgray", lty=2)33if(yaxis)34axis(1, cex.axis = 1, col = "darkgray", las=las)35mtext(colnames(w)[i], side= 3, cex=0.8, adj=0.5)36}37}38}39else { # rotation is horizontal (zero line is horizontal)40par(oma = c(8,4,2,1), mar=c(1,0,1,1)) # c(bottom, left, top, right)41layout(matrix(c(1:NCOL(w)), nr = NCOL(w), byrow = FALSE))42for(i in 1:NCOL(w)){43if(i==NCOL(w)){44barplot(w[,i], col=colorset[i], horiz=FALSE, ylim=c(0,max(w)), axes=FALSE, names.arg=row.names, las=las, cex.names=1.5, ...)45abline(h=0, col="darkgray")46if(equal.line)47abline(h=1/NROW(w), col="darkgray", lty=2)48axis(2, cex.axis = 1, col = "darkgray", las=las)49mtext(colnames(w)[i], side= 3, cex=1, adj=0)50}51else{52barplot(w[,i], col=colorset[i], horiz=FALSE, ylim=c(0,max(w)), axes=FALSE, names.arg=rep("",length(w[,i])), ylab=colnames(w)[i], ...)53abline(h=0, col="darkgray")54if(equal.line)55abline(h=1/NROW(w), col="darkgray", lty=2)56if(yaxis)57axis(2, cex.axis = 1, col = "darkgray", las=las)58mtext(colnames(w)[i], side= 3, cex=1, adj=0)59}60}61}62par(op)63}6465# Another way, this without layout66# http://timotheepoisot.fr/2013/02/17/stacked-barcharts/6768