[R] ggplot: combining geom's in function
Jeff Newmiller
jdnewmil at dcn.davis.CA.us
Sat Oct 24 10:50:28 CEST 2015
If you want to use the lattice way of doing things, why are you using ggplot?
`+` is defined for the output of ggplot (class "waiver") on the left, and the output of a layer function ("proto") on the right. The design of ggplot assumes left-to-right evaluation, which your first attempt failed to maintain. Your second approach is how I usually add multiple layers to a plot.
---------------------------------------------------------------------------
Jeff Newmiller The ..... ..... Go Live...
DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go...
Live: OO#.. Dead: OO#.. Playing
Research Engineer (Solar/Batteries O.O#. #.O#. with
/Software/Embedded Controllers) .OO#. .OO#. rocks...1k
---------------------------------------------------------------------------
Sent from my phone. Please excuse my brevity.
On October 23, 2015 9:46:49 PM GMT+02:00, sbihorel <Sebastien.Bihorel at cognigencorp.com> wrote:
>Following up on my previous reply, this following would work but would
>not behave like a geom function:
>
>geom_xyplot <- function (gplot, mapping = NULL, data = NULL, stat =
>"identity",
> position = "identity", na.rm = FALSE, type =
>'p', ...) {
>
> if (any(type=='p')){
> gplot + geom_point(mapping = mapping, data = data, stat = stat,
> position = position, na.rm = na.rm, ...)
> }
> if (any(type=='l')){
> gplot + geom_path(mapping = mapping, data = data, stat = stat,
> position = position, na.rm = na.rm, ...)
> }
> if (any(type%in%c('b','o'))){
> gplot + geom_point(mapping = mapping, data = data, stat = stat,
> position = position, na.rm = na.rm, ...) +
> geom_path(mapping = mapping, data = data, stat = stat,
> position = position, na.rm = na.rm, ...)
> }
>}
>
>Sebastien
>
>On 10/23/2015 12:27 PM, Jeff Newmiller wrote:
>> Have you looked at the qplot function in the ggplot2 package?
>>
>---------------------------------------------------------------------------
>> Jeff Newmiller The ..... ..... Go
>Live...
>> DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live
>Go...
>> Live: OO#.. Dead: OO#..
>Playing
>> Research Engineer (Solar/Batteries O.O#. #.O#. with
>> /Software/Embedded Controllers) .OO#. .OO#.
>rocks...1k
>>
>---------------------------------------------------------------------------
>> Sent from my phone. Please excuse my brevity.
>>
>> On October 23, 2015 3:12:41 PM GMT+02:00, sbihorel
><Sebastien.Bihorel at cognigencorp.com> wrote:
>>> Hi,
>>>
>>> Next adventure into my journey from lattice to ggplot: I would like
>to
>>> create a custom generic function that combines multiple existing
>geom's
>>>
>>> in order to reproduce what the lattice panel.xyplot function does
>based
>>>
>>> on the type argument (ie, plotting points only for type='p',
>plotting
>>> lines for type 'l', etc).
>>>
>>> My current naive attempt is:
>>>
>>> library(lattice)
>>> library(ggplot2)
>>>
>>> geom_xyplot <- function (mapping = NULL, data = NULL, stat =
>>> "identity",
>>> position = "identity", na.rm = FALSE, type
>=
>>> 'p', ...) {
>>>
>>> if (any(type=='p')){
>>> geom_point(mapping = mapping, data = data, stat = stat,
>>> position = position, na.rm = na.rm, ...)
>>> }
>>> if (any(type=='l')){
>>> geom_path(mapping = mapping, data = data, stat = stat,
>>> position = position, na.rm = na.rm, ...)
>>> }
>>> if (any(type%in%c('b','o'))){
>>> geom_point(mapping = mapping, data = data, stat = stat,
>>> position = position, na.rm = na.rm, ...) +
>>> geom_path(mapping = mapping, data = data, stat = stat,
>>> position = position, na.rm = na.rm, ...)
>>> }
>>> }
>>>
>>> data <- data.frame(x = rep(1:4, each = 25),
>>> y = rep(1:25, times = 4),
>>> g = rep(1:4, each = 25))
>>> data$x <- data$x + 0.005*(data$y)^2-0.1*data$y+1
>>>
>>> ggplot(data2, aes(x, y, group = g, colour = factor(g))) +
>>> geom_xyplot(type = 'l')
>>>
>>> I get:
>>>> Error: No layers in plot
>>> ______________________________________________
>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> 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.
More information about the R-help
mailing list