From jerome at hivnet.ubc.ca  Wed May 21 02:27:36 2003
From: jerome at hivnet.ubc.ca (Jerome Asselin)
Date: Wed May 21 10:28:58 2003
Subject: [Rd] axis() default values for "lty", "lwd", and "col"
In-Reply-To: <Pine.LNX.4.44.0305210718180.28736-100000@gannet.stats>
References: <Pine.LNX.4.44.0305210718180.28736-100000@gannet.stats>
Message-ID: <200305210833.BAA02862@hivnet.ubc.ca>


Thank you Prof Ripley for your comments. Let me explain in greater detail 
what I was thinking.

I agree that blue dotted axes are quite unusual, but thicker axes are 
useful. With the default lwd=1, some tickmarks don't show up if I shrink 
my plot and then print it on paper. Using lwd=2 for axes does fix that 
problem, but I have to make separate calls to axis() with option lwd=2 in 
order to do that.

My vision was that par() would give default values for everything 
(including lwd, lty and col) to be plotted in the graphical device. The 
user would explicitely define parameters in specific functions when 
different options are required.

For example, the following would give axes and tickmarks of lwd=2, but the 
diagonal line would be of lwd=4.
par(lwd=2)
plot(1:10,type="l",lwd=4)
Note that the box around the plot is of lwd=2 (as I would expect), but the 
axes (which are hidden under the box) and tickmarks are drawn with lwd=1. 
So there is an inconsistency between the width of the box and the 
tickmarks (and "hidden" axes). Why should there be?

Moreover, I think the user should have a good reason for using
  par(lty=2,lwd=3,col="blue")
  plot(1:10)
as opposed to
  dev.off() #clean up!
  plot(1:10,lty=2,lwd=3,col="blue")
These two ways of plotting are very different. In the first way, the 
parameters lty=2, lwd=3, and col="blue" should apply to everything in the 
graphical window, whereas in the second way they should apply only to the 
points.

Ideally, the distinction should be clear and consistent for all plotting 
functions. I also share your concerns that "this change would break a lot 
of existing code".

Sincerely,
Jerome Asselin

On May 20, 2003 11:28 pm, Prof Brian Ripley wrote:
> I believe this to be deliberate.  If I do
>
> par(lty=2,lwd=3,col="blue")
> plot(1:10)
>
> I do not want the axes to be thick, dotted and blue, with black labels.
> (It is also I suspect deliberate that
>
> plot(1:10,lty=2,lwd=3,col="blue")
>
> does not pass any of those parameters on to axis().)
>
> You say you made the labels bigger: to do that you needed to set
> cex.axis and cex.main, not cex.
>
> I'm afraid this change would break a lot of existing code.  I am aware
> that S-PLUS does this (with blue labels too), and I have always found it
> irritating to have to work around it.
>
> On Tue, 20 May 2003, Jerome Asselin wrote:
> > I would like to recommend a minor modification in axis() which I
> > believe can simplify the making of plots for publications. I am trying
> > to define default values for par() in order to make labels bigger and
> > lines thicker, so that the resulting plots look good when resized for
> > publication purposes. I ran into the following problem...
> >
> > axis() does not use par() values as default for "lty", "lwd", and
> > "col". Here is an example.
> >
> > par(lty=2,lwd=3,col="blue")
> > plot(1,1,bty="n",axes=F)
> > axis(1)
> > axis(2)
> >
> > Because axis() doesn't use the par() values, I have to explicitely
> > define the parameters "lty", "lwd", and "col" in my axis() calls. It
> > would make sense if axis() used the par() values by default.
> >
> > Hence, I recommend this simple fix in the axis() function([...])
> > statement in order to have axis() read the par() values for "lty",
> > "lwd", and "col".
> >
> > axis <-
> > function (side, at = NULL, labels = TRUE, tick = TRUE, line = NA,
> >     pos = NA, outer = FALSE, font = NA, vfont = NULL, lty =
> > par("lty"), lwd = par("lwd"), col = par("col"), ...)
> > { [...] }
> >
> > I use R1.7.0 on Red Hat Linux 7.2.
> >
> > Sincerely,
> > Jerome Asselin


[Rd] axis() default values for "lty", "lwd", and "col"
Jerome Asselin