blob: d95daab964ec2152b2324f53e8ec1dd574346889 [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 Kupietz590efd02023-09-01 11:01:08 +020027theme_ids <- function(base_size = 10,
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 }
Marc Kupietz3a65ecb2023-09-01 11:02:54 +020079 update_geom_defaults("text", list(size = 3, family = base_family))
Marc Kupietz52144812020-12-14 23:41:56 +010080 ret
81}
82
83
84#' IDS color and fill scales
85#'
86#' Colour and fill scales which use the palettes in
87#' \code{\link{ids_pal}()} and are meant for use with
88#' \code{\link{theme_ids}()}.
89#'
90#' @param palette A palette function that when called with a single integer
91#' argument (the number of levels in the scale) returns the values that they should take.
92#'
93#' @importFrom ggthemes gdocs_pal
94#' @importFrom ggplot2 discrete_scale
95#'
96#' @inheritDotParams ggthemes::scale_colour_gdocs
97#' @family colour ids
98#' @rdname scale_ids
99#' @export
100scale_colour_ids <- function(palette = "default", ...) {
Marc Kupietza371c672020-12-18 15:56:15 +0100101 discrete_scale("colour", "ids", ids_pal(palette=palette, ...))
Marc Kupietz52144812020-12-14 23:41:56 +0100102}
103
104#' @rdname scale_ids
105#' @inheritDotParams ggthemes::scale_colour_gdocs
106#' @importFrom ggplot2 discrete_scale
107#' @export
108scale_color_ids <- scale_colour_ids
109
110#' @rdname scale_ids
111#' @inheritParams ggthemes::scale_fill_gdocs
112#' @importFrom ggplot2 discrete_scale
113#' @export
114scale_fill_ids <- function(palette = "default", ...) {
Marc Kupietza371c672020-12-18 15:56:15 +0100115 discrete_scale("fill", "ids", ids_pal(palette=palette, ...))
Marc Kupietz52144812020-12-14 23:41:56 +0100116}