blob: 39ab83e0ff9781b860ecfc8e1804bf2c7c590331 [file] [log] [blame]
Marc Kupietz52144812020-12-14 23:41:56 +01001#' IDS Theme for ggplot2
2#'
3#' Based on Highcharts ggtheme \link[ggthemes]{theme_hc}
4#' which again is based on the plots in \url{Highcharts JS}.
5#'
6#' @note
7#'
8#' Note that here, unlike with the highcharter theme, you have to set the scale
9#' explicitly.
10#'
11#'
12#' @references
13#'
14#' \link[ggthemes]{theme_hc}
15#'
16#' \url{http://www.highcharts.com/demo/line-basic}
17#'
18#' \url{https://github.com/highslide-software/highcharts.com/tree/master/js/themes}
19#'
20#' @inheritParams ggplot2::theme_bw
21#' @param style \code{'light'}, \code{'dark'}.
22#' @param bgcolor Deprecated
23#' @example inst/examples/ex-ggplot.R
24#' @family themes ids
25#' @importFrom ggplot2 theme element_rect element_text element_line element_blank
26#' @export
Marc Kupietz1969ace2021-04-11 12:09:51 +020027theme_ids <- function(base_size = 12,
Marc Kupietz52144812020-12-14 23:41:56 +010028 base_family = idsBaseFontFamily,
29 style = c("default", "light", "dark"),
30 bgcolor = NULL) {
31
32 if (!is.null(bgcolor)) {
33 warning("`bgcolor` is deprecated. Use `style` instead.")
34 style <- bgcolor
35 }
36 style <- match.arg(style)
37 bgcolor <- switch(style,
38 default = backgroundColor,
39 "light" = backgroundColor,
40 "mono" = backgroundColor,
41 "dark" = backgroundColorDark)
42
43 ret <- theme(rect = element_rect(fill = bgcolor, linetype = 0, colour = NA),
44 text = element_text(size = base_size, family = base_family),
45 plot.title = element_text(hjust = 0.5),
46 plot.subtitle = element_text(hjust = 0.5, size = 13, colour = mediumContrastColor),
47 title = element_text(hjust = 0.5),
Marc Kupietz43e20c72021-02-09 14:58:11 +010048 axis.title.x = element_text(hjust = 0.5, size = 11,
49 colour = mediumContrastColor),
50 axis.title.y = element_text(hjust = 0.5, size = 11,
51 margin = margin(r = 10),
52 colour = mediumContrastColor),
53 legend.title = element_text(size=11, colour = mediumContrastColor),
Marc Kupietze8d0a8e2020-12-28 13:36:21 +010054 panel.grid.major.x = element_line(linetype = "dotted", colour = lowContrastColor),
Marc Kupietz52144812020-12-14 23:41:56 +010055 panel.grid.major.y = element_line(colour = lowContrastColor),
56 panel.grid.minor.y = element_blank(),
Marc Kupietz52144812020-12-14 23:41:56 +010057 panel.grid.minor.x = element_blank(),
58 panel.border = element_blank(),
59 panel.background = element_blank(),
60 legend.position = "right",
61 legend.key = element_rect(fill = paste0(bgcolor,"00")))
62
63 if (style == "dark") {
64 ret <- (ret + theme(rect = element_rect(fill = bgcolor),
65 text = element_text(colour = textColorDark),
66 plot.title = element_text(colour = highContrastColorDark),
67 plot.subtitle = element_text(colour = mediumContrastColorDark),
68 axis.title.x = element_text(colour = textColorDark),
69 axis.title.y = element_text(colour = textColorDark),
70 axis.text.x = element_text(color=textColorDark),
71 axis.text.y = element_text(color=textColorDark),
72 panel.grid.major.y = element_line(colour = lowContrastColorDark),
73 legend.title = element_text(colour = textColorDark)))
74 }
75 ret
76}
77
78
79#' IDS color and fill scales
80#'
81#' Colour and fill scales which use the palettes in
82#' \code{\link{ids_pal}()} and are meant for use with
83#' \code{\link{theme_ids}()}.
84#'
85#' @param palette A palette function that when called with a single integer
86#' argument (the number of levels in the scale) returns the values that they should take.
87#'
88#' @importFrom ggthemes gdocs_pal
89#' @importFrom ggplot2 discrete_scale
90#'
91#' @inheritDotParams ggthemes::scale_colour_gdocs
92#' @family colour ids
93#' @rdname scale_ids
94#' @export
95scale_colour_ids <- function(palette = "default", ...) {
Marc Kupietza371c672020-12-18 15:56:15 +010096 discrete_scale("colour", "ids", ids_pal(palette=palette, ...))
Marc Kupietz52144812020-12-14 23:41:56 +010097}
98
99#' @rdname scale_ids
100#' @inheritDotParams ggthemes::scale_colour_gdocs
101#' @importFrom ggplot2 discrete_scale
102#' @export
103scale_color_ids <- scale_colour_ids
104
105#' @rdname scale_ids
106#' @inheritParams ggthemes::scale_fill_gdocs
107#' @importFrom ggplot2 discrete_scale
108#' @export
109scale_fill_ids <- function(palette = "default", ...) {
Marc Kupietza371c672020-12-18 15:56:15 +0100110 discrete_scale("fill", "ids", ids_pal(palette=palette, ...))
Marc Kupietz52144812020-12-14 23:41:56 +0100111}