boB Rudis
6 years ago
7 changed files with 348 additions and 2 deletions
@ -0,0 +1,216 @@ |
|||
#' FT color palette |
|||
#' |
|||
#' @md |
|||
#' @docType data |
|||
#' @export |
|||
list( |
|||
slate = "#617a89", |
|||
blue = "#0b53c1", |
|||
red = "#ff0055", |
|||
green = "#b3e93e", |
|||
gray = "#909495", |
|||
yellow = "#ffec1b", |
|||
peach = "#fba29d", |
|||
light_blue = "#23d0fc" |
|||
) -> ft_cols |
|||
|
|||
#' @rdname ft_cols |
|||
#' @docType data |
|||
#' @export |
|||
ft_text_col <- "#929299" |
|||
|
|||
#' @inheritParams hrbrthemes::theme_ipsum_rc |
|||
#' @rdname theme_ipsum_rc |
|||
#' @export |
|||
theme_ft_rc <- function (base_family = "Roboto Condensed", base_size = 11.5, |
|||
plot_title_family = base_family, |
|||
plot_title_size = 18, |
|||
plot_title_face = "bold", |
|||
plot_title_margin = 10, |
|||
subtitle_family = if (.Platform$OS.type == "windows") "Roboto Condensed" else "Roboto Condensed Light", |
|||
subtitle_size = 13, |
|||
subtitle_face = "plain", |
|||
subtitle_margin = 15, |
|||
strip_text_family = base_family, |
|||
strip_text_size = 12, |
|||
strip_text_face = "plain", |
|||
caption_family = if (.Platform$OS.type == "windows") "Roboto Condensed" else "Roboto Condensed Light", |
|||
caption_size = 9, |
|||
caption_face = "plain", |
|||
caption_margin = 10, |
|||
axis_text_size = base_size, |
|||
axis_title_family = base_family, |
|||
axis_title_size = 9, |
|||
axis_title_face = "plain", |
|||
axis_title_just = "rt", |
|||
plot_margin = margin(30, 30, 30, 30), |
|||
grid = TRUE, axis = FALSE, ticks = FALSE) { |
|||
|
|||
grid_col <- axis_col <- "#464950" |
|||
|
|||
subtitle_col <- ft_text_col |
|||
|
|||
def_fore <- "#617a89" |
|||
|
|||
ggplot2::update_geom_defaults("point", list(colour = def_fore)) |
|||
ggplot2::update_geom_defaults("line", list(colour = def_fore)) |
|||
ggplot2::update_geom_defaults("area", list(colour = def_fore, fill=def_fore)) |
|||
ggplot2::update_geom_defaults("rect", list(colour = def_fore, fill=def_fore)) |
|||
ggplot2::update_geom_defaults("density", list(colour = def_fore, fill=def_fore)) |
|||
ggplot2::update_geom_defaults("bar", list(colour = def_fore, fill=def_fore)) |
|||
ggplot2::update_geom_defaults("col", list(colour = def_fore, fill=def_fore)) |
|||
ggplot2::update_geom_defaults("text", list(colour = ft_text_col)) |
|||
|
|||
ret <- ggplot2::theme_minimal(base_family=base_family, base_size=base_size) |
|||
|
|||
ret <- ret + theme(legend.background=element_blank()) |
|||
ret <- ret + theme(legend.key=element_blank()) |
|||
|
|||
if (inherits(grid, "character") | grid == TRUE) { |
|||
|
|||
ret <- ret + theme(panel.grid=element_line(color=grid_col, size=0.2)) |
|||
ret <- ret + theme(panel.grid.major=element_line(color=grid_col, size=0.2)) |
|||
ret <- ret + theme(panel.grid.minor=element_line(color=grid_col, size=0.15)) |
|||
|
|||
if (inherits(grid, "character")) { |
|||
if (regexpr("X", grid)[1] < 0) ret <- ret + theme(panel.grid.major.x=element_blank()) |
|||
if (regexpr("Y", grid)[1] < 0) ret <- ret + theme(panel.grid.major.y=element_blank()) |
|||
if (regexpr("x", grid)[1] < 0) ret <- ret + theme(panel.grid.minor.x=element_blank()) |
|||
if (regexpr("y", grid)[1] < 0) ret <- ret + theme(panel.grid.minor.y=element_blank()) |
|||
} |
|||
|
|||
} else { |
|||
ret <- ret + theme(panel.grid=element_blank()) |
|||
} |
|||
|
|||
if (inherits(axis, "character") | axis == TRUE) { |
|||
ret <- ret + theme(axis.line=element_line(color="white", size=0.15)) |
|||
if (inherits(axis, "character")) { |
|||
axis <- tolower(axis) |
|||
if (regexpr("x", axis)[1] < 0) { |
|||
ret <- ret + theme(axis.line.x=element_blank()) |
|||
} else { |
|||
ret <- ret + theme(axis.line.x=element_line(color=axis_col, size=0.15)) |
|||
} |
|||
if (regexpr("y", axis)[1] < 0) { |
|||
ret <- ret + theme(axis.line.y=element_blank()) |
|||
} else { |
|||
ret <- ret + theme(axis.line.y=element_line(color=axis_col, size=0.15)) |
|||
} |
|||
} else { |
|||
ret <- ret + theme(axis.line.x=element_line(color=axis_col, size=0.15)) |
|||
ret <- ret + theme(axis.line.y=element_line(color=axis_col, size=0.15)) |
|||
} |
|||
} else { |
|||
ret <- ret + theme(axis.line=element_blank()) |
|||
} |
|||
|
|||
if (!ticks) { |
|||
ret <- ret + theme(axis.ticks = element_blank()) |
|||
ret <- ret + theme(axis.ticks.x = element_blank()) |
|||
ret <- ret + theme(axis.ticks.y = element_blank()) |
|||
} else { |
|||
ret <- ret + theme(axis.ticks = element_line(size=0.15)) |
|||
ret <- ret + theme(axis.ticks.x = element_line(size=0.15)) |
|||
ret <- ret + theme(axis.ticks.y = element_line(size=0.15)) |
|||
ret <- ret + theme(axis.ticks.length = grid::unit(5, "pt")) |
|||
} |
|||
|
|||
xj <- switch(tolower(substr(axis_title_just, 1, 1)), b=0, l=0, m=0.5, c=0.5, r=1, t=1) |
|||
yj <- switch(tolower(substr(axis_title_just, 2, 2)), b=0, l=0, m=0.5, c=0.5, r=1, t=1) |
|||
|
|||
ret <- ret + theme(axis.text.x=element_text(size=axis_text_size, margin=margin(t=0))) |
|||
ret <- ret + theme(axis.text.y=element_text(size=axis_text_size, margin=margin(r=0))) |
|||
ret <- ret + theme(axis.title=element_text(size=axis_title_size, family=axis_title_family)) |
|||
ret <- ret + theme(axis.title.x=element_text(hjust=xj, size=axis_title_size, |
|||
family=axis_title_family, face=axis_title_face)) |
|||
ret <- ret + theme(axis.title.y=element_text(hjust=yj, size=axis_title_size, |
|||
family=axis_title_family, face=axis_title_face)) |
|||
ret <- ret + theme(strip.text=element_text(hjust=0, size=strip_text_size, |
|||
color = subtitle_col, |
|||
face=strip_text_face, family=strip_text_family)) |
|||
ret <- ret + theme(panel.spacing=grid::unit(2, "lines")) |
|||
ret <- ret + theme(plot.title=element_text(hjust=0, size=plot_title_size, |
|||
margin=margin(b=plot_title_margin), |
|||
family=plot_title_family, face=plot_title_face)) |
|||
ret <- ret + theme(plot.subtitle=element_text(hjust=0, size=subtitle_size, |
|||
color = subtitle_col, |
|||
margin = margin(b = subtitle_margin), |
|||
family = subtitle_family, face = subtitle_face)) |
|||
ret <- ret + theme(plot.caption=element_text(hjust=1, size=caption_size, |
|||
margin=margin(t=caption_margin), |
|||
family=caption_family, face=caption_face)) |
|||
ret <- ret + theme(plot.margin=plot_margin) |
|||
|
|||
bkgrnd <- "#252a32" |
|||
fgrnd <- "#617a89" |
|||
|
|||
ret <- ret + |
|||
theme(rect = element_rect(fill = bkgrnd, color = bkgrnd)) + |
|||
theme(plot.background = element_rect(fill = bkgrnd, color = bkgrnd)) + |
|||
theme(panel.background = element_rect(fill = bkgrnd, color = bkgrnd)) + |
|||
theme(rect = element_rect(fill = bkgrnd, color = bkgrnd)) + |
|||
theme(text = element_text(color = ft_text_col)) + |
|||
theme(axis.text = element_text(color = ft_text_col)) + |
|||
theme(title = element_text(color = ft_text_col)) + |
|||
theme(plot.title = element_text(color = "white")) + |
|||
theme(plot.subtitle = element_text(color = ft_text_col)) + |
|||
theme(plot.caption = element_text(color = ft_text_col)) + |
|||
theme(line = element_line(color = grid_col)) + |
|||
theme(axis.ticks = element_line(color = grid_col)) |
|||
|
|||
ret |
|||
|
|||
} |
|||
#' Change geom defaults from black to custom lights for the FT theme |
|||
#' |
|||
#' @export |
|||
ft_geom_defaults <- function() { |
|||
|
|||
geoms <- c("abline", "area", "bar", "boxplot", "col", "crossbar", |
|||
"density", "dotplot", "errorbar", "errorbar", |
|||
"hline", "line", "linerange", |
|||
"map", "path", "point", "polygon", "rect", "ribbon", "rug", "segment", |
|||
"step", "tile", "violin", "vline") |
|||
|
|||
for (g in geoms) { |
|||
message(g) |
|||
update_geom_defaults(g, list(colour = "#617a89", fill = "#617a89")) |
|||
} |
|||
|
|||
geoms <- c("text", "label") |
|||
|
|||
for (g in geoms) { |
|||
message(g) |
|||
update_geom_defaults(g, list(colour = ft_text_col, fill = "#252a32")) |
|||
} |
|||
|
|||
} |
|||
|
|||
ft_palette <- c("#617a89", "#0b53c1", "#ff0055", "#b3e93e", "#909495", "#ffec1b", "#fba29d", "#23d0fc") |
|||
|
|||
#' A bright qualitative color palette |
|||
#' |
|||
#' @export |
|||
#' @examples |
|||
#' library(scales) |
|||
#' scales::show_col(ft_palette()(8)) |
|||
ft_pal <- function() { manual_pal(ft_palette) } |
|||
|
|||
#' Discrete color & fill scales based on the FT palette |
|||
#' |
|||
#' See [ft_pal](). |
|||
#' |
|||
#' @md |
|||
#' @inheritDotParams ggplot2::discrete_scale -expand -position |
|||
#' @rdname scale_ft |
|||
#' @export |
|||
scale_colour_ft <- function(...) { discrete_scale("colour", "ft", ft_pal(), ...) } |
|||
|
|||
#' @export |
|||
#' @rdname scale_ft |
|||
scale_color_ft <- scale_colour_ft |
|||
|
|||
#' @export |
|||
#' @rdname scale_ft |
|||
scale_fill_ft <- function(...) { discrete_scale("fill", "ft", ft_pal(), ...) } |
@ -0,0 +1,17 @@ |
|||
% Generated by roxygen2: do not edit by hand |
|||
% Please edit documentation in R/ft.R |
|||
\docType{data} |
|||
\name{ft_cols} |
|||
\alias{ft_cols} |
|||
\alias{ft_text_col} |
|||
\title{FT color palette} |
|||
\format{An object of class \code{list} of length 8.} |
|||
\usage{ |
|||
ft_cols |
|||
|
|||
ft_text_col |
|||
} |
|||
\description{ |
|||
FT color palette |
|||
} |
|||
\keyword{datasets} |
@ -0,0 +1,11 @@ |
|||
% Generated by roxygen2: do not edit by hand |
|||
% Please edit documentation in R/ft.R |
|||
\name{ft_geom_defaults} |
|||
\alias{ft_geom_defaults} |
|||
\title{Change geom defaults from black to custom lights for the FT theme} |
|||
\usage{ |
|||
ft_geom_defaults() |
|||
} |
|||
\description{ |
|||
Change geom defaults from black to custom lights for the FT theme |
|||
} |
@ -0,0 +1,15 @@ |
|||
% Generated by roxygen2: do not edit by hand |
|||
% Please edit documentation in R/ft.R |
|||
\name{ft_pal} |
|||
\alias{ft_pal} |
|||
\title{A bright qualitative color palette} |
|||
\usage{ |
|||
ft_pal() |
|||
} |
|||
\description{ |
|||
A bright qualitative color palette |
|||
} |
|||
\examples{ |
|||
library(scales) |
|||
scales::show_col(ft_palette()(8)) |
|||
} |
@ -0,0 +1,63 @@ |
|||
% Generated by roxygen2: do not edit by hand |
|||
% Please edit documentation in R/ft.R |
|||
\name{scale_colour_ft} |
|||
\alias{scale_colour_ft} |
|||
\alias{scale_color_ft} |
|||
\alias{scale_fill_ft} |
|||
\title{Discrete color & fill scales based on the FT palette} |
|||
\usage{ |
|||
scale_colour_ft(...) |
|||
|
|||
scale_color_ft(...) |
|||
|
|||
scale_fill_ft(...) |
|||
} |
|||
\arguments{ |
|||
\item{...}{Arguments passed on to \code{ggplot2::discrete_scale} |
|||
\describe{ |
|||
\item{aesthetics}{The names of the aesthetics that this scale works with} |
|||
\item{scale_name}{The name of the scale} |
|||
\item{palette}{A palette function that when called with a single integer |
|||
argument (the number of levels in the scale) returns the values that |
|||
they should take} |
|||
\item{name}{The name of the scale. Used as axis or legend title. If |
|||
\code{waiver()}, the default, the name of the scale is taken from the first |
|||
mapping used for that aesthetic. If \code{NULL}, the legend title will be |
|||
omitted.} |
|||
\item{breaks}{One of: |
|||
\itemize{ |
|||
\item \code{NULL} for no breaks |
|||
\item \code{waiver()} for the default breaks computed by the |
|||
transformation object |
|||
\item A character vector of breaks |
|||
\item A function that takes the limits as input and returns breaks |
|||
as output |
|||
}} |
|||
\item{labels}{One of: |
|||
\itemize{ |
|||
\item \code{NULL} for no labels |
|||
\item \code{waiver()} for the default labels computed by the |
|||
transformation object |
|||
\item A character vector giving labels (must be same length as \code{breaks}) |
|||
\item A function that takes the breaks as input and returns labels |
|||
as output |
|||
}} |
|||
\item{limits}{A character vector that defines possible values of the scale |
|||
and their order.} |
|||
\item{na.translate}{Unlike continuous scales, discrete scales can easily show |
|||
missing values, and do so by default. If you want to remove missing values |
|||
from a discrete scale, specify \code{na.translate = FALSE}.} |
|||
\item{na.value}{If \code{na.translate = TRUE}, what value aesthetic |
|||
value should missing be displayed as? Does not apply to position scales |
|||
where \code{NA} is always placed at the far right.} |
|||
\item{drop}{Should unused factor levels be omitted from the scale? |
|||
The default, \code{TRUE}, uses the levels that appear in the data; |
|||
\code{FALSE} uses all the levels in the factor.} |
|||
\item{guide}{A function used to create a guide or its name. See |
|||
\code{\link[=guides]{guides()}} for more info.} |
|||
\item{super}{The super class to use for the constructed scale} |
|||
}} |
|||
} |
|||
\description{ |
|||
See \url{ft_pal}. |
|||
} |
Loading…
Reference in new issue