Pipe Dream
[This article was first published on R-SquareD, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Plusses and Arrows and Percents, oh my!. –
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Do you continually substitute “%>%” for “+” when switching between data wrangling and data visualization? I’ve got just the solution for you!
Count myself as one of those people that continually use a pipe instead of a plus and vice-verca when I’m writing a lot of code. Sir Hadley has basically shit the door on ever switching ggplot to using magrittr pipes and I don’t blame him. But he can’t stop me from doing whatever the heck I want.
In the following code, I took the sample ggplot code from the help and modified it to use magrittr.
library(magrittr)
library(ggplot2)
library(dplyr)
geom_point_p = function(p, ...) {
return(
p + geom_point(...)
)
}
geom_errorbar_p = function(p, ...) {
return(
p + geom_errorbar(...)
)
}
df = data.frame(
gp = factor(rep(letters[1:3], each = 10)),
y = rnorm(30)
)
ds = plyr::ddply(df, "gp", plyr::summarise, mean = mean(y), sd = sd(y))
# The summary data frame ds is used to plot larger red points on top
# of the raw data. Note that we don't need to supply `data` or `mapping`
# in each layer because the defaults from ggplot() are used.
ggplot(df, aes(gp, y)) %>%
geom_point_p() %>%
geom_point_p(data = ds, aes(y = mean), colour = 'red', size = 3)
# Same plot as above, declaring only the data frame in ggplot().
# Note how the x and y aesthetics must now be declared in
# each geom_point() layer.
ggplot(df) %>%
geom_point_p(aes(gp, y)) %>%
geom_point_p(data = ds, aes(gp, mean), colour = 'red', size = 3)
# Alternatively we can fully specify the plot in each layer. This
# is not useful here, but can be more clear when working with complex
# mult-dataset graphics
ggplot() %>%
geom_point_p(data = df, aes(gp, y)) %>%
geom_point_p(data = ds, aes(gp, mean), colour = 'red', size = 3) %>%
geom_errorbar_p(
data = ds,
aes(gp, mean, ymin = mean - sd, ymax = mean + sd),
colour = 'red',
width = 0.4
)
I may have to roll this into a package at some point.
To leave a comment for the author, please follow the link and comment on their blog: R-SquareD.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.