cpcinema is intended to extract color palettes from the images posted by
the Instagram account
@colorpalette.cinema.
@colorpalette.cinema takes stills from beautiful filmed and edited
cinema pieces and creates a color palette containing 10 colors from the
still. cpcinema extracts the hexcodes from one of their posts (or any
image with 10 equally spaced out colors at the bottom).
You can install the development version from GitHub with:
# install.packages("remotes")
remotes::install_github("JosiahParry/cpcinema")
This still from the Joker
(2019) contains a beautiful palette which seems like it may be suitable
as a diverging color palette. We can extract these hex codes using
extract_cpc_pal(). Note that the print method is not effectively
displayed in the README.
library(cpcinema)
img_path <- system.file("img/joker.jpg", package = "cpcinema")
(joker <- extract_cpc_pal(img_path))
#> <cpcinema[10]>
#> #01131F
#> #02284F
#> #00537D
#> #059EAC
#> #B6CDB1
#> #D19772
#> #AA7265
#> #D95105
#> #9C1D0A
#> #43244Dpal_from_post("https://www.instagram.com/p/CHvWFaanPDQ/")
#> [[1]]
#> <cpcinema[10]>
#> #0F2125
#> #003836
#> #204241
#> #006A7A
#> #8392A5
#> #536474
#> #203643
#> #40231F
#> #6C604A
#> #957975
#>
#> [[2]]
#> <cpcinema[10]>
#> #1E130F
#> #532818
#> #512C34
#> #8F4D4E
#> #905841
#> #AF6E38
#> #714308
#> #19291F
#> #072C46
#> #3D455A
#>
#> [[3]]
#> <cpcinema[10]>
#> #06070C
#> #261621
#> #452435
#> #59253C
#> #995856
#> #AC6746
#> #CE9643
#> #D59770
#> #E8BD9A
#> #90B08BMoreover, we are able to actually generate color palettes with more or
less values than is available in our palette with the color_palette()
function.
colors <- c("#842000", "#EC9B01", "#3F5D91")
my_colors <- color_palette(colors, n = 3)
my_colors
#> <cpcinema[3]>
#> #842000
#> #EC9B01
#> #3F5D91color_palette() has three arguments pal, n, and type. pal
expects a character vector of hexcodes. n we specify how many colors
from the palette should be selected. If n is omitted, it is the same
number of values as in the palette. If it is larger than the length of
pal, you will be prompted to change the type argument. There are two
different arguments for type. These are discrete (the default) and
continuous. When type = "continuous" we are indicating that
interpolation of the colors needs to be performed.
For example, we can take the palette from above and interpolate 7 more
colors by setting n = 10 and type = "continuous".
(colors_10 <- color_palette(colors, n = 10, "continuous"))
#> <cpcinema[10]>
#> #842000
#> #9B3B00
#> #B25600
#> #C97100
#> #E08D00
#> #D89411
#> #B28630
#> #8B7850
#> #656A70
#> #3F5D91Pretty cool, huh? We can take those 10 colors and extract only 5 of them
by setting n = 5.
color_palette(colors_10, 5)
#> <cpcinema[5]>
#> #842000
#> #B25600
#> #E08D00
#> #B28630
#> #656A70Moreover, if you’d prefer to select them manually, you can do that as
well using bracket [ indexing.
colors_10[c(1, 3, 6, 9)]
#> <cpcinema[4]>
#> #842000
#> #B25600
#> #D89411
#> #656A70library(tidyverse)
# create some fake data
x <- expand.grid(group = 1:10, big = LETTERS) %>%
group_by(group) %>%
mutate(value = rnorm(n(), mean = group))
# plot that fake data
ggplot(x, aes(x = group, y = big, fill = value)) +
geom_tile() +
scale_fill_gradientn(colours = color_palette(joker, n = 100, "continuous")) +
scale_x_discrete(expand = c(0, 0)) +
scale_y_discrete(expand = c(0, 0)) +
coord_equal() +
labs(x = "", y = "") ggplot(data = palmerpenguins::penguins, aes(x = bill_length_mm, y = bill_depth_mm)) +
geom_point(aes(color = species,
shape = species),
size = 2) +
scale_color_manual(values = my_colors) +
theme_light()There are also a number of available palettes for you right away. These
are accessible through the list object available_pals.
This package implements an S3 cpcinema class using vctrs. The class
cpcinema contains a Crayon style in the attributes for each
color—this is what enables the fun printing. cpcinema objects will be
coerced to character vectors when needed. Otherwise you can cast them
explicitly with as.character(). To extract the crayon styles use
palette_style().
pal <- color_palette(colors)
palette_style(pal)
#> [[1]]
#> Crayon style function, #842000: example output.
#>
#> [[2]]
#> Crayon style function, #EC9B01: example output.
#>
#> [[3]]
#> Crayon style function, #3F5D91: example output.This package was inspired by @karthik’s
wesanderson package.
Additionally, @jesseadler’s
debvectrs presentation at
rstudio::conf(2020L) and repository helped tremendously in getting the
footing for the vctrs classes.


