[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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._