From ripley at stats.ox.ac.uk  Fri Apr 16 17:05:11 2004
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Fri Apr 16 17:05:19 2004
Subject: [Rd] barplot() does not draw bars correctly in R 1.9.0 (PR#6776)
In-Reply-To: <20040416165303.4a2496fa.Achim.Zeileis@wu-wien.ac.at>
Message-ID: <Pine.LNX.4.44.0404161603320.17871-100000@gannet.stats>

Please be careful with your replies, folks: you have already created two
new items in R-bugs and so duplicate posts to R-devel.  You need to ensure
that (PR#6776) is on the first line of the subject.

On Fri, 16 Apr 2004, Achim Zeileis wrote:

> 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
> > 
> >
> 
> ______________________________________________
> R-devel@stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-devel
> 
> 

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595


[Rd] barplot() does not draw bars correctly in R 1.9.0 (PR#6776)
Prof Brian Ripley