theme {ggplot2} | R Documentation |
Use this function to modify theme settings.
theme(..., complete = FALSE)
... |
a list of element name, element pairings that modify the existing theme. |
complete |
set this to TRUE if this is a complete
theme, such as the one returned |
Theme elements can 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
.
For more examples of modifying properties using
inheritance, see +.gg
and
%+replace%
.
To see a graphical representation of the inheritance tree, see the last example below.
The individual theme elements are:
line | all line elements
(element_line ) |
rect | all rectangluar
elements (element_rect ) |
text | all text
elements (element_text ) |
title | all title
elements: plot, axes, legends (element_text ;
inherits from text ) |
axis.title | label of axes (element_text ;
inherits from text ) |
axis.title.x | x axis
label (element_text ; inherits from
axis.title ) |
axis.title.y | y axis label
(element_text ; inherits from axis.title )
|
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.y | y
axis tick labels (element_text ; inherits from
axis.text ) |
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.ticks.margin | space
between tick mark and tick label (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 | extra space added around legend
(unit ) |
legend.key | background underneath
legend keys (element_rect ; inherits from
rect ) |
legend.key.size | size of legend keys
(unit ; inherits from legend.key.size ) |
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. ("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) |
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") |
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.margin | margin around facet panels
(unit ) |
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 ) |
plot.background | background of the entire plot
(element_rect ; inherits from rect ) |
plot.title | plot title (text appearance)
(element_text ; inherits from title ) |
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.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 )
|
p <- qplot(mpg, wt, data = mtcars) p p + theme(panel.background = element_rect(colour = "pink")) p + theme_bw() # Scatter plot of gas mileage by vehicle weight p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() # Calculate slope and intercept of line of best fit coef(lm(mpg ~ wt, data = mtcars)) p + geom_abline(intercept = 37, slope = -5) # Calculate correlation coefficient with(mtcars, cor(wt, mpg, use = "everything", method = "pearson")) #annotate the plot p + geom_abline(intercept = 37, slope = -5) + geom_text(data = data.frame(), aes(4.5, 30, label = "Pearson-R = -.87")) # Change the axis labels # Original plot p p + xlab("Vehicle Weight") + ylab("Miles per Gallon") # Or p + labs(x = "Vehicle Weight", y = "Miles per Gallon") # Change title appearance p <- p + labs(title = "Vehicle Weight-Gas Mileage Relationship") # Set title to twice the base font size p + theme(plot.title = element_text(size = rel(2))) p + theme(plot.title = element_text(size = rel(2), colour = "blue")) # Changing plot look with themes DF <- data.frame(x = rnorm(400)) m <- ggplot(DF, aes(x = x)) + geom_histogram() # Default is theme_grey() m # Compare with m + theme_bw() # Manipulate Axis Attributes library(grid) # for unit m + theme(axis.line = element_line(size = 3, colour = "red", linetype = "dotted")) m + theme(axis.text = element_text(colour = "blue")) m + theme(axis.text.y = element_blank()) m + theme(axis.ticks = element_line(size = 2)) m + theme(axis.title.y = element_text(size = rel(1.5), angle = 90)) m + theme(axis.title.x = element_blank()) m + theme(axis.ticks.length = unit(.85, "cm")) # Legend Attributes z <- ggplot(mtcars, aes(wt, mpg, colour = factor(cyl))) + geom_point() z z + theme(legend.position = "none") z + theme(legend.position = "bottom") # Or use relative coordinates between 0 and 1 z + theme(legend.position = c(.5, .5)) z + theme(legend.background = element_rect(colour = "black")) # Legend margin controls extra space around outside of legend: z + theme(legend.background = element_rect(), legend.margin = unit(1, "cm")) z + theme(legend.background = element_rect(), legend.margin = unit(0, "cm")) # Or to just the keys z + theme(legend.key = element_rect(colour = "black")) z + theme(legend.key = element_rect(fill = "yellow")) z + theme(legend.key.size = unit(2.5, "cm")) z + theme(legend.text = element_text(size = 20, colour = "red", angle = 45)) z + theme(legend.title = element_text(face = "italic")) # To change the title of the legend use the name argument # in one of the scale options z + scale_colour_brewer(name = "My Legend") z + scale_colour_grey(name = "Number of \nCylinders") # Panel and Plot Attributes z + theme(panel.background = element_rect(fill = "black")) z + theme(panel.border = element_rect(linetype = "dashed", colour = "black")) z + theme(panel.grid.major = element_line(colour = "blue")) z + theme(panel.grid.minor = element_line(colour = "red", linetype = "dotted")) z + theme(panel.grid.major = element_line(size = 2)) z + theme(panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank()) z + theme(plot.background = element_rect()) z + theme(plot.background = element_rect(fill = "green")) # Faceting Attributes set.seed(4940) dsmall <- diamonds[sample(nrow(diamonds), 1000), ] k <- ggplot(dsmall, aes(carat, ..density..)) + geom_histogram(binwidth = 0.2) + facet_grid(. ~ cut) k + theme(strip.background = element_rect(colour = "purple", fill = "pink", size = 3, linetype = "dashed")) k + theme(strip.text.x = element_text(colour = "red", angle = 45, size = 10, hjust = 0.5, vjust = 0.5)) k + theme(panel.margin = unit(5, "lines")) k + theme(panel.margin = unit(0, "lines")) # Modify a theme and save it mytheme <- theme_grey() + theme(plot.title = element_text(colour = "red")) p + mytheme ## Run this to generate a graph of the element inheritance tree build_element_graph <- function(tree) { require(igraph) require(plyr) inheritdf <- function(name, item) { if (length(item$inherit) == 0) data.frame() else data.frame(child = name, parent = item$inherit) } edges <- rbind.fill(mapply(inheritdf, names(tree), tree)) # Explicitly add vertices (since not all are in edge list) vertices <- data.frame(name = names(tree)) graph.data.frame(edges, vertices = vertices) } g <- build_element_graph(ggplot2:::.element_tree) V(g)$label <- V(g)$name set.seed(324) par(mar=c(0,0,0,0)) # Remove unnecessary margins plot(g, layout=layout.fruchterman.reingold, vertex.size=4, vertex.label.dist=.25)