barplot() does not draw bars correctly in R 1.9.0 (PR#6776)
On Fri, 16 Apr 2004 09:59:02 -0400 Duncan Murdoch wrote:
On Fri, 16 Apr 2004 15:44:52 +0200, Achim Zeileis <Achim.Zeileis@wu-wien.ac.at> wrote :
On Fri, 16 Apr 2004 11:40:46 +0200 (CEST) phgrosjean@sciviews.org wrote:
Bars are not stacked, but superimposed. This happens even with the
first example of barplot:
tN <- table(Ni <- rpois(100, lambda=5))
r <- barplot(tN, col='gray')
AFAICS, this problem occurs exactly for 1-way tables like above. If
barplot(as.vector(tN), col = "gray")
is used instead, everything is as it was in 1.8.1. The reason is that
in the new version of barplot.default the following code (which
remained unchanged) does not do anymore what do what one would want:
if (is.vector(height)) {
height <- cbind(height)
beside <- TRUE
}
else if (is.array(height) && (length(dim(height)) == 1)) {
height <- rbind(height)
beside <- TRUE
}
that is, vectors and 1-way tables are treated differently which lead
to the problem. Using cbind() instead of rbind() in the second half,
overcomes this problem.
However, the colors are then chosen in the same way as for vectors,
resulting in different colors than in R 1.8.1. Maybe the default
color choice should then be modified as well.
I'm pretty sure the problem is due to this change,
Of course, yes. Kurt and I have been working on this and as I recall used mainly vectors and matrices for testing and obviously not 1-way tables.
a few lines below the ones you listed: 1.8.1: width <- rep(width, length.out = NR * NC) 1.9.0: width <- rep(width, length.out = NR) This change was made at the same time as the offset arg was introduced; is it intentional?
Yes, we changed it in that way so that the col, width and offset arguments are expanded (if necessary) in a similar way. Compare for example x <- cbind(1:3, 2) barplot(x, width = 1:2, beside = FALSE) barplot(x, width = 1:2, beside = TRUE) in 1.8.1 and 1.9.0. In the new version the code tries to find a (statistically) sensible grouping in both cases. One could argue that in certain cases the widths of each bar should be controlled and they should not be grouped...depends on what you want to do if length(width) does not match the number of bars drawn. Z
Duncan Murdoch