[R] barplot x axis

Marc Schwartz mschwartz@medanalytics.com
Sat, 12 Oct 2002 15:46:20 -0500


> -----Original Message-----
> Dear Schwartz and Pausas,
> 
> Thanks for your messages.

You are welcome.

> I was referring to the axis line and its tick marks.
> 
> If you write barplot(table(c(1,2,2,3,3,3,4,4,5))) in R150 and in R160
you will
> have different plots. The last one will not display the x axis line
and tick
> marks, but only x axis labels, isn't it?
> 
> In this case "axis(1, at = mp, labels = 1:5)" solves the problem.
> 
> Best regards,
> 
> Antonio Olinto

Antonio,

It turns out that the change in behavior, which I was able to duplicate
by re-installing V1.5.1 on my system, is the result in the change in
coding in the axis() function internal C code (do_axis) in V.1.6.0 and
not in barplot().  The code in barplot() did not change either in
content or in the default argument values.

If you review the C do_axis code in the V1.5.1 plot.c, which is the C
source code for many of the plotting functions, you will find that the
author overrides the passed "lty" argument.  The author has a comment in
the C code as follows:

  /* I can't think of a good reason to allow axes with a non-solid
line-type,
     * so I override any value the user may have specified.
     * This may need to be revisited, but this should
     * cover 99.99% of the cases. */

In barplot(), the following code is called to draw the label axis (x
axis when horiz = FALSE):

axis(if (horiz) 
                2
            else 1, at = at.l, labels = names.arg, lty = 0, cex.axis =
cex.names, 
                ...)

Note that the 'lty' argument is specified as "0", which should be
"blank" or no line.

However, the V1.5.x internal C code in plot.c overrides this value with
"solid" as per the author's comments above. Thus in V.1.5.x, you get a
solid line on the x axis.

In V.1.6.0, there was a change in axis() to allow for the user
specification of "lty", "lwd" and "col" line parameters as arguments to
axis().  

The V1.6.0 internal C code for do_axis was changed to facilitate this
and therefore the axis call in V.1.6.0 barplot() as above now results in
no line being drawn, since the "lty = 0" (blank) argument in not
overridden in the internal C code.

Hence the (perhaps unintended) change in the default behavior in
barplot() in V.1.6.0.

It took me a while to track this down and finally isolated it to the
axis() function change in 1.6.0.

I am also copying this reply to r-devel, more as an FYI, since my guess
is that other functions, either R standard functions or community based
functions, may have their default behavior altered as well.

Marc Schwartz



-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._