I find no solution for these two following issues:
First I try this:
library(tidyverse)
gg <- mtcars %>%
mutate(group=ifelse(gear==3,1,2)) %>%
ggplot(aes(x=carb, y=drat)) + geom_point(shape=group)
Error in layer(data = data, mapping = mapping, stat = stat, geom =
GeomPoint,:object 'group' not found
which is obviously not working. But using something like this .$group
is also not successfull. Of note, I have to specifiy the shape outside from aes()
The second problem is this. I'm not able to call a saved ggplot (gg
) within a pipe.
gg <- mtcars %>%
mutate(group=ifelse(gear==3,1,2)) %>%
ggplot(aes(x=carb, y=drat)) + geom_point()
mtcars %>%
filter(vs == 0) %>%
gg + geom_point(aes(x=carb, y=drat), size = 4)
Error in gg(.) : could not find function "gg"
Thanks for your help!
After a long time I found a solution here. One has to set the complete ggplot term in {}
.
mtcars %>%
mutate(group=ifelse(gear==3,1,2)) %>% {
ggplot(.,aes(carb,drat)) +
geom_point(shape=.$group)}
If you wrap your shape
definition in aes()
you can get the desired behavior. To use shape
outside of aes()
you can pass it a single value (ie shape=1
). Also note that group
is converted to a discrete var, geom_point
throws an error when you pass a continuous var to shape
.
library(tidyverse)
gg <- mtcars %>%
mutate(group=ifelse(gear==3,1,2)) %>%
ggplot(aes(x=carb, y=drat)) +
geom_point(aes(shape=as.factor(group)))
gg
Second, the %>%
operator, when called as lhs %>% rhs
, assumes that the rhs
is a function. So as the error shows, you are calling gg
as a function. Calling a plot as a function on a dataframe (ie gg(mtcars)
) isnt a valid operation.
See @docendo discimus comment on the question for how to use {}
to accomplish adding a layer to an existing ggplot
object from a magrittr pipeline.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With