Plotting from different data sources on the same plot (with ggplot2)
This would probably also be interesting to some:
On 2007-October-01 , at 00:48 , hadley wickham wrote:
That's great!
In fact I think I found exactly what I was looking for. I can just
do:
p = ggplot() + coord_equal()
p$aspect.ratio = 1
to set up the plot, and then add the layers and have ggplot take care
of resizing and laying out everything automagically:
p = p + geom_path(data=coast, mapping=aes(x=lon, y=lat))
p = p + geom_point(data=coords, mapping=aes(x=lon, y=lat))
p = p + geom_text(data=coords, mapping=aes(x=lon, y=lat,
label=station))
etc...
Oh, I love ggplot ;) !
Or even less verbosely: p = ggplot(mapping = aes(x=lon, y= lat) + coord_equal() p = p + geom_path(data=coast) p = p + geom_point(data=coords) p = p + geom_text(data=coords, aes(label = station))
The data is completely independent of the plot specification. This is very different from the other plotting models in R, so it may take a while to get your head around it.
Yes, indeed. That's a completely new way of thinking (especially given my MATLAB, Scilab background) but how powerful! I found the whole "data mapping" concept very elegant but did not grasp all the flexibility behind it. I wonder how mainstream it can get since so many people are used to an other graphics paradigm.
It's definitely a big change, but I hope that people will see the potential benefits and invest some time learning it. I definitely have a lot to improve on the documentation though!
Anyway, I just need to define a new geom_arrow now, to plot wind
velocities arrows at several locations, and I'll be a happy man. Is
there a specific reason why '...' arguments are not passed to grid
functions or is it just to keep the complexity under control? I am
thinking in particular that:
p = ggplot(coords) + geom_segment(mapping=aes(x=lon,
y=lat, xend=lon
+0.03 ,yend=lat+-0.02), arrow=arrow(length=unit(0.1,"inches")))
would do exactly what I want provided that the 'arrow' argument is
passed on to segmentsGrob which is used in geom_segment.
In general, ... doesn't get passed on to the underlying grid function because there isn't a one-to-one mapping from geoms to grobs (take geom_boxplot for example). However, funnily enough, I have just added the arrows argument to geom_segment for my sister, so if you let me know what platform you're on, I can send you an updated version.
JiHO --- http://jo.irisson.free.fr/