Lemon --- Freshing up your ggplots
This package contains functions primarily in these domains of ggplot2:
As well as some functions in knitr.
# install.packages("devtools") # Install release from GitHub: devtools::install_github("stefanedwards/lemon", ref='v0.3.1') # Or get the lastest development version from GitHub: devtools::install_github("stefanedwards/lemon")
We can display a limit on the axes range.
library(lemon) ggplot(mtcars, aes(x=cyl, y=mpg)) + geom_point() + coord_capped_cart(bottom='both', left='none') + theme_light() + theme(panel.border=element_blank(), axis.line = element_line())
panel.border and enable
theme, otherwise you will not see an effect!
We could also show that the x-axis is categorical (or ordinal):
(p <- ggplot(mtcars, aes(x=as.factor(cyl), y=mpg)) + geom_point(position=position_jitter(width=0.1)) + coord_flex_cart(bottom=brackets_horisontal(), left=capped_vertical('both')) + theme_light() + theme(panel.border=element_blank(), axis.line = element_line()) )
When capping the axis lines, they are never capped further inwards than the ticks! Look up
Having produced such wonderous axes, it is a pity they are not plotted around all panels when using faceting. We have extended both
facet_wrap to produce axis, ticks, and labels on all panels:
p + facet_rep_wrap(~gear, ncol=2, label=label_both)
They work just like the normal ones; look up
A geom that combines both points and lines. While possible by using both
geom_line, position adjustments are not preserved between the two layers.
geom_path, respectively, while preserving position adjustments.
geom_line as two separate geoms. Right: The two geoms combined into
geom_pointline. Both produced with
ggplot(mtcars, aes(wt, mpg, colour=factor(cyl))) + geom_point(col='grey'), where the grey points indicate the true location of the datapoint.
An added visual effect is seen as the lines do not touch the points, leaving a small gap (set by argument
Reposition the legend onto the plot. Exactly where you want it:
dsamp <- diamonds[sample(nrow(diamonds), 1000), ] d <- ggplot(dsamp, aes(carat, price)) + geom_point(aes(colour = clarity)) reposition_legend(d, 'top left')
Scavenging the Internet, we have found some functions that help work with legends.
Frequently appearing on Stack Overflow, we bring you
library(grid) legend <- g_legend(d) grid.newpage() grid.draw(legend)
Originally brought to you by (Baptiste Auguié)[http://baptiste.github.io/] (https://github.com/tidyverse/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs) and (Shaun Jackman)[http://rpubs.com/sjackman] (http://rpubs.com/sjackman/grid_arrange_shared_legend). We put it in a package.
dsamp <- diamonds[sample(nrow(diamonds), 1000), ] p1 <- qplot(carat, price, data = dsamp, colour = clarity) p2 <- qplot(cut, price, data = dsamp, colour = clarity) p3 <- qplot(color, price, data = dsamp, colour = clarity) p4 <- qplot(depth, price, data = dsamp, colour = clarity) grid_arrange_shared_legend(p1, p2, p3, p4, ncol = 2, nrow = 2)
Extensions to knitr
knitr allows S3 methods for
knit_print for specialised printing of objects. We provide
lemon_print for data frames, dplyr tables, and summary objects, that can be used to render the output, without mucking up the code source. An added benefit is that we can use RStudio's inline data frame viewer:
Relative file paths made safe
knitr for computations that use external binaries and/or write temporary files, setting the root directory for
knitr's knitting saves the user from a file mess. E.g.
But we want to keep our file paths relative for the scripts / document to be transferable. We introduce the
TMPDIR=tempdir() .data <- .dot('data') knitr_opts_knit$set(root.dir=TMPDIR)
We can then load our data file using the created
.data function, even though the chunk is executed from TMPDIR.
dat <- read.table(.data('mydata.tab'))