Make your own color palettes with paletti
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Last week I blogged about the dutchmasters color palettes package, which was inspired
by the wonderful ochRe package. As
mentioned I shamelessly copied the package. I replaced the list with character
vectors containing hex colors and did a find and replace to make it
dutchmasters
instead of ochRe
. This was pretty ugly. I realized that when
we would refactor the ochRe
functions, thus creating functions that create the functions, there would no longer be a need to copy-paste and find-and-replace. So that is what I did. I refactored and expanded ochRe
’s chore into paletti
. (Name chosen because I liked the ring of it). You grab it from Github, with devtools::install_github("edwinth/paletti")
.
Single palettes
paletti
takes both single palettes (character vectors with hex codes) and
lists with palettes, like the ochRe
and dutchmasters
lists. Lets start with
a single palette, this might be useful when you want your coporate identity
colors translated into R. Here I just pick some colors found on the interweb
library(paletti) library(ggplot2) mycols <- c( red = "#E27D60", blue = "#085DCB", orange = "#E8A87C", purple = "#C38D9E", green = "#41B3A3" ) viz_palette(mycols)
Now, ochRe provided us with two functions, one two create a ggplot
scale for
colours and to create one for fills. These functions can be created in the
following fashion
mycols_fill <- get_scale_fill(get_pal(mycols)) mycols_color <- get_scale_color(get_pal(mycols))
Both now can be used in ggplot
mtcars$cyl <- as.character(mtcars$cyl) col_plot <- ggplot(mtcars, aes(mpg, drat, color = cyl)) + geom_point(size = 4) col_plot + mycols_color()
fill_plot <- ggplot(mtcars, aes(cyl, fill = cyl)) + geom_bar() fill_plot + mycols_fill()
Now, I said I expanded the ochRe
code a bit. The function get_hex
will
produce a function that will return a function in which you can directly return
the hex code by typing its unquoted name. Handy if you want an exact color from
your palette. Prerequisit is that your palette is a named character vector.
mycols_hex <- get_hex(mycols) fill_plot + scale_fill_manual(values = mycols_hex(blue, purple, red))
Multiple palettes in a list
Both ochRe
and dutchmasters
offer multiple palettes in a list. The only
difference from a single palette is that in the returned function you have to
specify the name of the palette youw want to use. If you don’t, it defaults to
the first palette in the list.
ochRe_col <- get_scale_color(get_pal(ochre_palettes)) dutchmasters_fill <- get_scale_fill(get_pal(dutchmasters)) col_plot + ochRe_col("lorikeet")
fill_plot + dutchmasters_fill("view_of_Delft")
And the same holds for the get_hex
function. You can feed a list with palettes
as well. Note that the palettes that you are going to call must have named
elements.
dutchmasters_hex <- get_hex(dutchmasters) fill_plot + scale_fill_manual(values = dutchmasters_hex("anatomy", black(cloak), red(muscle), brown(table)))
That’s it, off you go! Add your own color palette(s) and start plotting. Once
again a major thanks to the ochRe team for the inspiration and the foundations
on which paletti
is built.
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.