blob: a30e7d0b1a6ddc5018f48da5ffa59ca53c3105ea [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 Kupietz9a0a2a52021-04-27 11:46:01 +020048 axis.text = element_text(size = 11, family = base_family),
49 axis.title = element_text(size = 11, family = base_family),
50 legend.text = element_text(size = 11, family = base_family),
51 strip.text = element_text(size = 11, family = base_family),
Marc Kupietz43e20c72021-02-09 14:58:11 +010052 axis.title.x = element_text(hjust = 0.5, size = 11,
53 colour = mediumContrastColor),
54 axis.title.y = element_text(hjust = 0.5, size = 11,
55 margin = margin(r = 10),
56 colour = mediumContrastColor),
57 legend.title = element_text(size=11, colour = mediumContrastColor),
Marc Kupietze8d0a8e2020-12-28 13:36:21 +010058 panel.grid.major.x = element_line(linetype = "dotted", colour = lowContrastColor),
Marc Kupietz52144812020-12-14 23:41:56 +010059 panel.grid.major.y = element_line(colour = lowContrastColor),
60 panel.grid.minor.y = element_blank(),
Marc Kupietz52144812020-12-14 23:41:56 +010061 panel.grid.minor.x = element_blank(),
62 panel.border = element_blank(),
63 panel.background = element_blank(),
64 legend.position = "right",
65 legend.key = element_rect(fill = paste0(bgcolor,"00")))
66
67 if (style == "dark") {
68 ret <- (ret + theme(rect = element_rect(fill = bgcolor),
69 text = element_text(colour = textColorDark),
70 plot.title = element_text(colour = highContrastColorDark),
71 plot.subtitle = element_text(colour = mediumContrastColorDark),
72 axis.title.x = element_text(colour = textColorDark),
73 axis.title.y = element_text(colour = textColorDark),
74 axis.text.x = element_text(color=textColorDark),
75 axis.text.y = element_text(color=textColorDark),
76 panel.grid.major.y = element_line(colour = lowContrastColorDark),
77 legend.title = element_text(colour = textColorDark)))
78 }
79 ret
80}
81
82
83#' IDS color and fill scales
84#'
85#' Colour and fill scales which use the palettes in
86#' \code{\link{ids_pal}()} and are meant for use with
87#' \code{\link{theme_ids}()}.
88#'
89#' @param palette A palette function that when called with a single integer
90#' argument (the number of levels in the scale) returns the values that they should take.
91#'
92#' @importFrom ggthemes gdocs_pal
93#' @importFrom ggplot2 discrete_scale
94#'
95#' @inheritDotParams ggthemes::scale_colour_gdocs
96#' @family colour ids
97#' @rdname scale_ids
98#' @export
99scale_colour_ids <- function(palette = "default", ...) {
Marc Kupietza371c672020-12-18 15:56:15 +0100100 discrete_scale("colour", "ids", ids_pal(palette=palette, ...))
Marc Kupietz52144812020-12-14 23:41:56 +0100101}
102
103#' @rdname scale_ids
104#' @inheritDotParams ggthemes::scale_colour_gdocs
105#' @importFrom ggplot2 discrete_scale
106#' @export
107scale_color_ids <- scale_colour_ids
108
109#' @rdname scale_ids
110#' @inheritParams ggthemes::scale_fill_gdocs
111#' @importFrom ggplot2 discrete_scale
112#' @export
113scale_fill_ids <- function(palette = "default", ...) {
Marc Kupietza371c672020-12-18 15:56:15 +0100114 discrete_scale("fill", "ids", ids_pal(palette=palette, ...))
Marc Kupietz52144812020-12-14 23:41:56 +0100115}