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