I have a list of observations that are -1, 1 or 0. I would like to represent them in a horizontal bar color coded based on value like a stacked bar graph. I can achieve this in the form of a png with the following code: A = floor(runif(10)*3) - 1 png(width=100, height=10) par(mar=c(0,0,0,0)) image(matrix(A), col=grey(c(0.1, 0.5, 0.9))) dev.off() However I would like to do this with one of the standard plotting tools (i.e. barplot) to take advantage of labels and multiple series. Any help would be appreciated. - Luis Naver
On Fri, 2007-09-07 at 12:45 -0700, Luis Naver wrote:> I have a list of observations that are -1, 1 or 0. I would like to > represent them in a horizontal bar color coded based on value like a > stacked bar graph. I can achieve this in the form of a png with the > following code: > > A = floor(runif(10)*3) - 1 > > png(width=100, height=10) > par(mar=c(0,0,0,0)) > image(matrix(A), col=grey(c(0.1, 0.5, 0.9))) > dev.off() > > However I would like to do this with one of the standard plotting > tools (i.e. barplot) to take advantage of labels and multiple > series. Any help would be appreciated. > > - Luis NaverHow about this: barplot(rep(1, length(A)), col = "black", space = 0, border = 0) barplot(A, col = grey(0.9), space = 0, border = 0, add = TRUE) The first call sets the plot region to black, ensuring that the x and y axes are consistent with the second call. Alternatively, you can use barplot2() in the gplots CRAN package to do this in a single call, as it has an argument to color the plot region. HTH, Marc Schwartz
On Fri, 7 Sep 2007, Luis Naver wrote:> I have a list of observations that are -1, 1 or 0. I would like to > represent them in a horizontal bar color coded based on value like a > stacked bar graph. I can achieve this in the form of a png with the > following code: > > A = floor(runif(10)*3) - 1 > > png(width=100, height=10) > par(mar=c(0,0,0,0)) > image(matrix(A), col=grey(c(0.1, 0.5, 0.9))) > dev.off()If I understand you correctly, you want a sequence of bars with equal height and colors coded by A (treated like a factor). So Maybe something like cA <- grey.colors(3)[factor(A)] barplot(rep(1, length(A)), col = cA, border = cA) or barplot(rep(1, length(A)), col = cA, border = cA, space = 0, xaxs = "i", axes = FALSE) ? hth, Z> However I would like to do this with one of the standard plotting > tools (i.e. barplot) to take advantage of labels and multiple > series. Any help would be appreciated. > > - Luis Naver > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > >
Luis Naver wrote:> I have a list of observations that are -1, 1 or 0. I would like to > represent them in a horizontal bar color coded based on value like a > stacked bar graph. I can achieve this in the form of a png with the > following code: > > A = floor(runif(10)*3) - 1 > > png(width=100, height=10) > par(mar=c(0,0,0,0)) > image(matrix(A), col=grey(c(0.1, 0.5, 0.9))) > dev.off() > > However I would like to do this with one of the standard plotting > tools (i.e. barplot) to take advantage of labels and multiple > series. Any help would be appreciated. >Hi Luis, I understood your request as wanting a single horizontal bar with 10 segments, each colored according to the value of A. If this is correct, you might want: library(plotrix) plot(1,xlim=c(-1,1),ylim=c(-1,1),xlab="",ylab="",type="n",axes=FALSE) gradient.rect(-1,-0.1,1,0.1,col=grey(c(0.1,0.5,0.9))[A+2]) Jim