Re: [R] drawing segments through points with pch=1

From: Martin Maechler <>
Date: Mon, 21 Jul 2008 12:00:09 +0200

>>>>> "DE" == David Epstein <> >>>>> on Sun, 20 Jul 2008 15:40:34 +0100 writes:

    DE> What I don't like about type="b", also suggested by Paul
    DE> Smith, is that the segments do not go right up to the
    DE> little circles---a gap is left, which I don't like. 

The gap is a feature; if you don't want it, use "o" ([o]verplotting lines and points) instead of "b" ([b]oth (lines and points)

plot(x, ybarv, type="o", pch=21, bg="white")

does in one line what Uwe's solution did in three.

    DE> So far, Uwes' solution is what suits me best. However, I
    DE> understand Brian's objection, though it doesn't apply in
    DE> my case. The discussion makes me fear that it's a very
    DE> long road ahead before I can get fine control of R
    DE> graphics.

I'd recommend you should really get and read Paul Murrell's book I just mentioned {in the other thread on R-help}, or read through the basic help pages points, lines, plot.default, ... quite carefully, and try and start to understand the many examples / demos etc.

    DE> Thanks David

    DE> On 20 Jul, 2008, at 14:54, Prof Brian Ripley wrote:

    >> On Sun, 20 Jul 2008, Uwe Ligges wrote:

>>> You probably want to make your code readable, read ?points and go
>>> ahead by making the plot without points (plot(....., type="n")),
>>> drawing segments and at the end paint points with white background
>>> colour in order to "overwrite" the segments:
    >> Except that the background is not necessarily white (and you may  
    >> want it to be transparent or translucent).
    >> It looks to me like lines(type="b") might be what was wanted.

>>> y <- c(1.21, 0.51, 0.14, 1.62, -0.8,
>>> 0.72, -1.71, 0.84, 0.02, -0.12)
>>> ybar <- mean(y)
>>> ll <- length(y)
>>> ybarv <- rep(ybar, ll)
>>> x <- 1:ll
>>> plot(x, ybarv, type="n")
>>> segments(x[1], ybar, x[ll], ybar)
>>> points(x, ybarv, pch=21, bg="white")
>>> Uwe Ligges
>>> David Epstein wrote:
    >>>> Please excuse me for asking such basic questions:
    >>>> Here is my code
    >>>>> y=c(1.21,0.51,0.14,1.62,-0.8,0.72,-1.71,0.84,0.02,-0.12)
    >>>>> ybar=mean(y)
    >>>>> ll=length(y);
    >>>>> ybarv=rep(ybar,ll)
    >>>>> x=1:ll
    >>>>> plot(x,ybarv,pch=1)
    >>>>> segments(x[1],ybar,x[ll],ybar)
    >>>> What I get is a collection of small circles, with a segment "on  
    >>>> top" of the circles, which is almost what I want. But I don't  
    >>>> want the segment to be visible inside any small circle.
    >>>> Is there an easy way to arrange for the segment to "lie behind"  
    >>>> the pch=1 markers, as in hidden line removal, so that the circles  
    >>>> remain with nothing inside them? I tried putting the segments  
    >>>> command first, but then no segment appeared at all.
    >>>> In general, is there a method of laying a drawing "on top" of  
    >>>> another. I tried inserting add="T" as an argument to plot, and R  
    >>>> objected strongly.
    >>>> Thanks for any help
    >>>> David Epstein

______________________________________________ mailing list PLEASE do read the posting guide and provide commented, minimal, self-contained, reproducible code. Received on Mon 21 Jul 2008 - 10:17:53 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Mon 21 Jul 2008 - 11:32:05 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive