[R] sizing non-vector point shapes in ggplot2

hadley wickham h.wickham at gmail.com
Mon Jun 16 16:55:46 CEST 2008


On Mon, Jun 16, 2008 at 7:52 AM, mfrumin <michael at frumin.net> wrote:
>
> Dear all,
>
> With normal plotting, one can size a set of points in a plot using a vector
> argument to cex in the points() function.  This works whether you are using
> one of the standard R symbols (i.e. 19+) or some ascii symbol, such as '/'
>
> eg:
> plot(1:10, 1:10, type='n');
> points(1:10, 1:10, cex = 1:10, pch = '/')
>
> Trying to make the transition to ggplot2, I find that the aesthetic size
> mapping does not apply if i do geom_point(..., shape='/') -- the points show
> up looking like '/' but they are not sized.  Is there anything to do about
> this?
>
> eg:
> ggplot(data = data.frame(x = 1:10, y = 1:10, size = 1:10), aes(x = x, y =
> y)) + geom_point(mapping = aes(size = size), shape = '/')
>
> the plot that I'm making really needs a vertically oriented mark, not a
> round-ish point/square/triangle that takes up a lot of area. am I totally
> out of luck?

Hmmm, I'd never noticed this "feature" of grid before.  To size the
points, I'm using the size argument of grid.points, which doesn't seem
to affect the size of character based plotting symbols (because the
are using the fontsize graphical parameter).  I've cc'd Paul on this
email so he can confirm whether this is a bug or by design.

Regardless, you can make ggplot size the symbols correctly by running
the following code:

GeomPoint$draw <- function(., data, scales, coordinates, ...) {
    with(coordinates$transform(data),
      ggname(.$my_name(), pointsGrob(x, y, size=unit(size, "mm"), pch=shape,
      gp=gpar(col=colour, fill = fill, fontsize = size * .pt)))
    )
  }

Hadley

-- 
http://had.co.nz/



More information about the R-help mailing list