Dear Prof. Ripley and all,

Thank you very much for the pointers and the always insightful comments. I'd like to add a few further comments below for the sake of discussion,

On 26 May 2009, at 08:35, Prof Brian Ripley wrote:

I don't know where you get your claims from.  R graphics is handled
internally in inches, with a device-specific mapping to pixels/points
etc (which is documented for each device on its help page).  This has
to be done carefully, as pixels may not be square.

I saw hints of this use of inches in the code but I started off with the wrong assumption that symbols would be in mm (partly because ggplot2 suggested it would be so, partly because it's the natural unit I was taught to use throughout french technical education).


What the meaning of pch=1:23 is in terms of coordinates is not
documented except via the sources.

I own Paul Murrell's R graphics book but I don't think the precise description of the symbols' size is presented in there. Perhaps a useful addition for the next edition?

The source is function GESymbol in
file src/main/engine.c, so for example pch = 2 is

Thank you, I failed to pinpoint this.


        case 2: /* S triangle - point up */
            xc = RADIUS * GSTR_0;
            r = toDeviceHeight(TRC0 * xc, GE_INCHES, dd);
            yc = toDeviceHeight(TRC2 * xc, GE_INCHES, dd);
            xc = toDeviceWidth(TRC1 * xc, GE_INCHES, dd);
            xx[0] = x; yy[0] = y+r;
            xx[1] = x+xc; yy[1] = y-yc;
            xx[2] = x-xc; yy[2] = y-yc;
            gc->fill = R_TRANWHITE;
            GEPolygon(3, xx, yy, gc, dd);
            break;

which as you see is in inches, not mm as you asserted.  The first line
sets xc to 0.375 inches for cex=1, for example.

You need to take the stroke width (as set by lty) into account when
assessing the visual size of symbols


Altering the implementation is definitely way out of my league, but I'm glad I learned where to find this piece of information should the need come in the future.

On Mon, 25 May 2009, baptiste auguie wrote:

Dear all,


Having received no answer in r-help I'm trying r-devel (hoping this is not a
stupid question).

I don't understand the rationale behind the absolute sizes of the point
symbols, and I couldn't find it documented (I got lost in the C code
graphics.c and gave up).

You are expected to study the sources for yourself.  That's part of
the price of R.

There is a manual, 'R Internals', that would have explained to you
that graphics.c is part of base graphics and hence not of grid
graphics.

R is a big project, and these implementation details can be hard to track down for non-programmers of my sort. That's why I was hoping for some hints on r-help first. In particular, it's not clear to me whether base graphics and grid graphics share these sort of "primitive" pieces of code. I'll have to read R internals.


As a last note, I'd like to share this idea I've contemplated recently (currently implementing it at the R level for ggplot2),

The points() symbols (well, rather the par() function, presumably) could gain an attribute 'type', say, with a few options:

- 'old' for backward compatibility, this choice would set the symbols to use to the current values in the same way that palette() provides a default set of colours.

- 'polygons', could provide the user with a set of regular polygons ordered by the number of vertices (3 to 6 and circle, for instance) with a consistent set of attributes (all having col and fill parameters). These could be complemented by starred versions of the polygons to make for a larger set of shapes.

Such a design could provide several benefits over the current situation, 1) the possible mapping between symbols and data could be more straight-forward (in the spirit of the ggplot2 package), 2) the symbol size could be made consistent either with a constant area or a constant circumscribing circle, thereby conforming with the idea that information should minimise visual artefacts in displaying the data (I'm not saying this is the case currently, but I feel it may not be optimum.).

- perhaps something else --- TeachingDemos has some interesting examples in the my.symbols help page.


Thanks again,

baptiste



The example below uses
Grid to check the size of the symbols against a square of 10mm x 10mm.

checkOneSymbol <- function(pch=0){
 gTree(children=gList(
     rectGrob(0.5, 0.5, width=unit(10, "mm"), height=unit(10,
"mm"),
             gp=gpar(lty=2, fill=NA, col=alpha("black", 0.5))),
 pointsGrob(0.5, 0.5, size=unit(10, "mm"),pch=pch,
     gp=gpar(col=alpha("red", 0.5)))
 ))

}
all.symbols <- lapply(0:23, checkOneSymbol)

pdf("symbols.pdf", height=1.2/2.54, width=24.2/2.54)

vp <- viewport(width=0.5, height=0.5, name="main")
pushViewport(vp)

pushViewport(viewport(layout=grid.layout(1, 24,
                     widths=unit(10, "mm"),
                     heights=unit(10, "mm"),
                     just="center")))

for(ii in 0:23){
pushViewport(viewport(layout.pos.col=ii+1, layout.pos.row=1))
grid.draw(all.symbols[[ii+1]])
upViewport(1)
}
dev.off()


What dictates the size of each symbol? (in other words, why is pch=21
a circle of radius given in inches, while pch=2 is a triangle of base
length specified  in mm and offset vertically?, etc.)

I'm trying to develop a new symbol for the ggplot2 package where the size is to be accurately mapped onto the data either in linear size or area. I was
expecting a similar idea behind the choice of base symbols. Is this
documented?

Best regards,

baptiste

_____________________________

Baptiste AuguiƩ

School of Physics
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK

Phone: +44 1392 264187

http://newton.ex.ac.uk/research/emag

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

--
Brian D. Ripley,                  rip...@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to