Modify components of a theme

Description

Use theme() to modify individual components of a theme, allowing you to control the appearance of all non-data components of the plot. theme() only affects a single plot: see theme_update if you want modify the active theme, to affect all subsequent plots.

Usage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
theme(line, rect, text, title, aspect.ratio, axis.title, axis.title.x,
  axis.title.x.top, axis.title.y, axis.title.y.right, axis.text, axis.text.x,
  axis.text.x.top, axis.text.y, axis.text.y.right, axis.ticks, axis.ticks.x,
  axis.ticks.y, axis.ticks.length, axis.line, axis.line.x, axis.line.y,
  legend.background, legend.margin, legend.spacing, legend.spacing.x,
  legend.spacing.y, legend.key, legend.key.size, legend.key.height,
  legend.key.width, legend.text, legend.text.align, legend.title,
  legend.title.align, legend.position, legend.direction, legend.justification,
  legend.box, legend.box.just, legend.box.margin, legend.box.background,
  legend.box.spacing, panel.background, panel.border, panel.spacing,
  panel.spacing.x, panel.spacing.y, panel.grid, panel.grid.major,
  panel.grid.minor, panel.grid.major.x, panel.grid.major.y, panel.grid.minor.x,
  panel.grid.minor.y, panel.ontop, plot.background, plot.title, plot.subtitle,
  plot.caption, plot.margin, strip.background, strip.placement, strip.text,
  strip.text.x, strip.text.y, strip.switch.pad.grid, strip.switch.pad.wrap, ...,
  complete = FALSE, validate = TRUE)

Arguments

line

all line elements (element_line)

rect

all rectangular elements (element_rect)

text

all text elements (element_text)

title

all title elements: plot, axes, legends (element_text; inherits from text)

aspect.ratio

aspect ratio of the panel

axis.title

label of axes (element_text; inherits from text)

axis.title.x

x axis label (element_text; inherits from axis.title)

axis.title.x.top

x axis label on top axis (element_text; inherits from axis.title.x)

axis.title.y

y axis label (element_text; inherits from axis.title)

axis.title.y.right

y axis label on right axis (element_text; inherits from axis.title.y)

axis.text

tick labels along axes (element_text; inherits from text)

axis.text.x

x axis tick labels (element_text; inherits from axis.text)

axis.text.x.top

x axis tick labels on top axis (element_text; inherits from axis.text.x)

axis.text.y

y axis tick labels (element_text; inherits from axis.text)

axis.text.y.right

y axis tick labels on right axis (element_text; inherits from axis.text.y)

axis.ticks

tick marks along axes (element_line; inherits from line)

axis.ticks.x

x axis tick marks (element_line; inherits from axis.ticks)

axis.ticks.y

y axis tick marks (element_line; inherits from axis.ticks)

axis.ticks.length

length of tick marks (unit)

axis.line

lines along axes (element_line; inherits from line)

axis.line.x

line along x axis (element_line; inherits from axis.line)

axis.line.y

line along y axis (element_line; inherits from axis.line)

legend.background

background of legend (element_rect; inherits from rect)

legend.margin

the margin around each legend (margin)

legend.spacing

the spacing between legends (unit)

legend.spacing.x

the horizontal spacing between legends (unit); inherits from legend.spacing

legend.spacing.y

the horizontal spacing between legends (unit); inherits from legend.spacing

legend.key

background underneath legend keys (element_rect; inherits from rect)

legend.key.size

size of legend keys (unit)

legend.key.height

key background height (unit; inherits from legend.key.size)

legend.key.width

key background width (unit; inherits from legend.key.size)

legend.text

legend item labels (element_text; inherits from text)

legend.text.align

alignment of legend labels (number from 0 (left) to 1 (right))

legend.title

title of legend (element_text; inherits from title)

legend.title.align

alignment of legend title (number from 0 (left) to 1 (right))

legend.position

the position of legends ("none", "left", "right", "bottom", "top", or two-element numeric vector)

legend.direction

layout of items in legends ("horizontal" or "vertical")

legend.justification

anchor point for positioning legend inside plot ("center" or two-element numeric vector) or the justification according to the plot area when positioned outside the plot

legend.box

arrangement of multiple legends ("horizontal" or "vertical")

legend.box.just

justification of each legend within the overall bounding box, when there are multiple legends ("top", "bottom", "left", or "right")

legend.box.margin

margins around the full legend area, as specified using margin

legend.box.background

background of legend area (element_rect; inherits from rect)

legend.box.spacing

The spacing between the plotting area and the legend box (unit)

panel.background

background of plotting area, drawn underneath plot (element_rect; inherits from rect)

panel.border

border around plotting area, drawn on top of plot so that it covers tick marks and grid lines. This should be used with fill=NA (element_rect; inherits from rect)

panel.spacing

spacing between facet panels (unit)

panel.spacing.x

horizontal spacing between facet panels (unit; inherits from panel.spacing)

panel.spacing.y

vertical spacing between facet panels (unit; inherits from panel.spacing)

panel.grid

grid lines (element_line; inherits from line)

panel.grid.major

major grid lines (element_line; inherits from panel.grid)

panel.grid.minor

minor grid lines (element_line; inherits from panel.grid)

panel.grid.major.x

vertical major grid lines (element_line; inherits from panel.grid.major)

panel.grid.major.y

horizontal major grid lines (element_line; inherits from panel.grid.major)

panel.grid.minor.x

vertical minor grid lines (element_line; inherits from panel.grid.minor)

panel.grid.minor.y

horizontal minor grid lines (element_line; inherits from panel.grid.minor)

panel.ontop

option to place the panel (background, gridlines) over the data layers. Usually used with a transparent or blank panel.background. (logical)

plot.background

background of the entire plot (element_rect; inherits from rect)

plot.title

plot title (text appearance) (element_text; inherits from title) left-aligned by default

plot.subtitle

plot subtitle (text appearance) (element_text; inherits from title) left-aligned by default

plot.caption

caption below the plot (text appearance) (element_text; inherits from title) right-aligned by default

plot.margin

margin around entire plot (unit with the sizes of the top, right, bottom, and left margins)

strip.background

background of facet labels (element_rect; inherits from rect)

strip.placement

placement of strip with respect to axes, either "inside" or "outside". Only important when axes and strips are on the same side of the plot.

strip.text

facet labels (element_text; inherits from text)

strip.text.x

facet labels along horizontal direction (element_text; inherits from strip.text)

strip.text.y

facet labels along vertical direction (element_text; inherits from strip.text)

strip.switch.pad.grid

space between strips and axes when strips are switched (unit)

strip.switch.pad.wrap

space between strips and axes when strips are switched (unit)

...

additional element specifications not part of base ggplot2. If supplied validate needs to be set to FALSE.

complete

set this to TRUE if this is a complete theme, such as the one returned by theme_grey(). Complete themes behave differently when added to a ggplot object. Also, when setting complete = TRUE all elements will be set to inherit from blank elements.

validate

TRUE to run validate_element, FALSE to bypass checks.

Theme inheritance

Theme elements inherit properties from other theme elements. For example, axis.title.x inherits from axis.title, which in turn inherits from text. All text elements inherit directly or indirectly from text; all lines inherit from line, and all rectangular objects inherit from rect. This means that you can modify the appearance of multiple elements by setting a single high-level component.

See Also

+.gg and %+replace%, element_blank, element_line, element_rect, and element_text for details of the specific theme elements.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
p1 <- ggplot(mtcars, aes(wt, mpg)) +
  geom_point() +
  labs(title = "Fuel economy declines as weight increases")
p1

# Plot ---------------------------------------------------------------------
p1 + theme(plot.title = element_text(size = rel(2)))
p1 + theme(plot.background = element_rect(fill = "green"))

# Panels --------------------------------------------------------------------

p1 + theme(panel.background = element_rect(fill = "white", colour = "grey50"))
p1 + theme(panel.border = element_rect(linetype = "dashed", fill = NA))
p1 + theme(panel.grid.major = element_line(colour = "black"))
p1 + theme(
  panel.grid.major.y = element_blank(),
  panel.grid.minor.y = element_blank()
)

# Put gridlines on top of data
p1 + theme(
  panel.background = element_rect(fill = NA),
  panel.grid.major = element_line(colour = "grey50"),
  panel.ontop = TRUE
)

# Axes ----------------------------------------------------------------------
p1 + theme(axis.line = element_line(size = 3, colour = "grey80"))
p1 + theme(axis.text = element_text(colour = "blue"))
p1 + theme(axis.ticks = element_line(size = 2))
p1 + theme(axis.ticks.length = unit(.25, "cm"))
p1 + theme(axis.title.y = element_text(size = rel(1.5), angle = 90))


# Legend --------------------------------------------------------------------
p2 <- ggplot(mtcars, aes(wt, mpg)) +
  geom_point(aes(colour = factor(cyl), shape = factor(vs))) +
  labs(
    x = "Weight (1000 lbs)",
    y = "Fuel economy (mpg)",
    colour = "Cylinders",
    shape = "Transmission"
   )
p2

# Position
p2 + theme(legend.position = "none")
p2 + theme(legend.justification = "top")
p2 + theme(legend.position = "bottom")

# Or place inside the plot using relative coordinates between 0 and 1
# legend.justification sets the corner that the position refers to
p2 + theme(
  legend.position = c(.95, .95),
  legend.justification = c("right", "top"),
  legend.box.just = "right",
  legend.margin = margin(6, 6, 6, 6)
)

# The legend.box properties work similarly for the space around
# all the legends
p2 + theme(
  legend.box.background = element_rect(),
  legend.box.margin = margin(6, 6, 6, 6)
)

# You can also control the display of the keys
# and the justifaction related to the plot area can be set
p2 + theme(legend.key = element_rect(fill = "white", colour = "black"))
p2 + theme(legend.text = element_text(size = 8, colour = "red"))
p2 + theme(legend.title = element_text(face = "bold"))

# Strips --------------------------------------------------------------------

p3 <- ggplot(mtcars, aes(wt, mpg)) +
  geom_point() +
  facet_wrap(~ cyl)
p3

p3 + theme(strip.background = element_rect(colour = "black", fill = "white"))
p3 + theme(strip.text.x = element_text(colour = "white", face = "bold"))
p3 + theme(panel.spacing = unit(1, "lines"))

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.