Skip to content

Missing elements in theme definitions #3584

Closed
@clauswilke

Description

@clauswilke

All themes miss some elements in their definitions (i.e., elements are implicitly set to NULL rather than explicitly set to NULL). I think all themes provided by ggplot2 should explicitly define all elements. This will become more important if we want to allow extensible themes (#2540, #2784), because we'll have to distinguish between elements a theme knows about but wants to be NULL and elements a theme doesn't know about that need to be filled in from the theme defaults. Missing element definitions also have led to unexpected problems in the past, e.g. #2724.

Elements that I notice are missing:

  • In all themes: some of panel.grid, panel.grid.major, panel.grid.minor, panel.grid.major.x, panel.grid.minor.x, panel.grid.major.y, panel.grid.minor.y
  • In theme_void(): Too many to list, including parts of axis.*, legend.*, panel.*, strip.*, plot.background.

As an aside, we should recommend as a general practice to external theme developers that they always start with an existing ggplot2 theme and then just modify the parts they want to change, just like we do in most cases:

ggplot2/R/theme-defaults.r

Lines 247 to 267 in 6f5ffea

# Starts with theme_grey and then modify some parts
theme_grey(
base_size = base_size,
base_family = base_family,
base_line_size = base_line_size,
base_rect_size = base_rect_size
) %+replace%
theme(
# white background and dark border
panel.background = element_rect(fill = "white", colour = NA),
panel.border = element_rect(fill = NA, colour = "grey20"),
# make gridlines dark, same contrast with white as in theme_grey
panel.grid = element_line(colour = "grey92"),
panel.grid.minor = element_line(size = rel(0.5)),
# contour strips to match panel contour
strip.background = element_rect(fill = "grey85", colour = "grey20"),
# match legend key to background
legend.key = element_rect(fill = "white", colour = NA),
complete = TRUE
)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions