On Jun 22, 2012, at 1:50 PM, Martin Maechler wrote:


It's really not that difficult to fix with some simple changes to the
code:

scatter.smooth.col <-
function (x, y = NULL, span = 2/3, degree = 1, family = c("symmetric",
    "gaussian"), xlab = NULL, ylab = NULL, ylim = range(y, pred$y,
    na.rm = TRUE), evaluation = 50, ..., lcol, llty, llwd)
{
    xlabel <- if (!missing(x))
        deparse(substitute(x))
    ylabel <- if (!missing(y))
        deparse(substitute(y))
    xy <- xy.coords(x, y, xlabel, ylabel)
    x <- xy$x
    y <- xy$y
    xlab <- if (is.null(xlab))
        xy$xlab
    else xlab
    ylab <- if (is.null(ylab))
        xy$ylab
    else ylab
    pred <- loess.smooth(x, y, span, degree, family, evaluation)
    plot(x, y, ylim = ylim, xlab = xlab, ylab = ylab, ...)
    lines(pred$x, pred$y, col=lcol, lty=llty, lwd=llwd)
    invisible()
}

require(graphics)  # Not really sure why this is needed but it's in
the help page

because the function builds on loess() and loess() is part of
'stats' and not 'graphics' (and because all of this is
"historical" ..)

with(cars, scatter.smooth.col(speed, dist, lcol="red", llwd=3, llty=3))
# dotted thick smoothed line results

Indeed, this is really trivial and one could argue
"every" R user should be able to do something like the above.

A slightly nicer solution --- which not every R user will be able to do,
but hopefully (;-) everyone reading R-help for a little while ---
is to allow a *list* of more arguments, all passed to lines(),
actually as Mark proposed {at the very end}, and to use
do.call(lines, *)

As a little exercise for you to see,
I'll add  that to R-devel .. even though I wonder if its worth
the extra work {{but then, as otherwise someone gets the idea to
                 file it in the bug tracker ..}}
soon to be visible at
  https://svn.r-project.org/R/trunk/src/library/stats/R/loess.R

The reason I added specific arguments was to prevent the points and the lines from necessarily being the same color. Likewise, I noted that the 'lwd' argument seemed to affect the points in a manner I found surprising, although it made sense when I thought about it a bit. After looking at plot.default and par's conventions about coloring parameters, I was going got suggest using 'col.pred' and 'lwd.pred' as argument names that would get passed to line( ... col, lwd). Experimentation shows that the points do not get affected by 'lty'.

--
David.

Martin Maechler,
ETH Zurich  (and R core)


--
David


On Jun 22, 2012, at 10:51 AM, Mark Payne wrote:

Hi David,

Thanks for the reply. I agree - it just seemed that it was something
fairly obvious that was missing from an otherwise handy little
function.... Would it be appropriate to file it as a "request for
improvement" in the bug tracking system?

Mark

On 22 June 2012 16:30, David L Carlson - dcarl...@tamu.edu
<+r-help+trevva+3b274928d0.dcarlson#tamu....@spamgourmet.com> wrote:
You are correct about scatter.smooth, but loess.smooth
(listed along with scatter.smooth on the same
help page) gives you the way to get what you want:

x <- rnorm(25)
y <- rnorm(25)
plot(x, y)
lines(loess.smooth(x,y), col="red", lty=2, lwd=2)

----------------------------------------------
David L Carlson
Associate Professor of Anthropology
Texas A&M University
College Station, TX 77843-4352


-----Original Message-----
From: r-help-boun...@r-project.org [mailto:r-help-bounces@r-
project.org] On Behalf Of r-help.20.tre...@spamgourmet.com
Sent: Friday, June 22, 2012 6:04 AM
To: r-help@r-project.org
Subject: [R] scatter.smooth() line colour

Hi,

I really like the scatter.smooth() function - its extremeley useful.
However, as far as I understand it, there is no way to change the
properties of the smoothing line e.g. col, lty, lwd. The
scatter.smooth function accepts a ... argument, but these are not
passed to the plotting function that actually plots the smoother -
only to the function that plots the points. Could I please therefore
request that an argument be added to this function to give easier
control over line properties? e.g. line.par=list()

Best wishes,

Mark Payne


David Winsemius, MD
West Hartford, CT


David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to