Themes - janeshdev/ggplot2 GitHub Wiki

Proposed themes and theme enhancements.

enhancements

themes

comparison themes

theme_minimal

minimalistic theme to maximize data/ink ratio, so as to focus more strongly on the data glyphs. It also serves to facilitate post-processing in graphic design software (Illustrator, Inkscape)

theme_minimal gist

<embedding does not seem to work yet?>

<script src="https://gist.github.com/2594954.js?file=ggplot2%20theme_minimal"></script>

Comment: I like the axis ticks and text and panel border rectangle in more similar colour: so either

theme_minimal_cb <- function (base_size = 12, base_family = "", ...){
  modifyList (theme_minimal (base_size = base_size, base_family = base_family),
              list (panel.border = theme_rect(fill = NA, colour = "grey50")))
}

theme_minimal_cb_L <- function (base_size = 12, base_family = "", ...){
  modifyList (theme_minimal (base_size = base_size, base_family = base_family),
              list (axis.line = theme_segment (colour = "black")))
}

or (a very light version)

theme_minimal_light <- function (base_size = 12, base_family = "", ...){
  modifyList (theme_minimal (base_size = base_size, base_family = base_family), 
              list (axis.ticks = theme_segment (colour = "grey50"), 
                    axis.text.x = theme_text (colour = "grey33"), 
                    axis.text.y = theme_text (colour = "grey33")))
}

theme_fullframe

Maximize the plotting area so as to extend over the full viewport. Axis labels and titles are masked; this theme is therefore limited to special graphs such as images where full control over the image size is required (e.g. for alignment with other graphical elements).

theme_fullframe <- function (base_size = 12){
  structure(list(
    axis.line = theme_blank(), 
    axis.text.x = theme_blank(), 
    axis.text.y = theme_blank(),
    axis.ticks = theme_blank(), 
    axis.title.x = theme_blank(), 
    axis.title.y = theme_blank(), 
    axis.ticks.length = unit(0, "lines"), 
    axis.ticks.margin = unit(0, "lines"), 
    legend.position = "none", 
    panel.background = theme_blank(), 
    panel.border = theme_blank(), 
    panel.grid.major = theme_blank(), 
    panel.grid.minor = theme_blank(), 
    panel.margin = unit(0, "lines"), 
    plot.background = theme_blank(), 
    plot.margin = unit(0*c(-1.5, -1.5, -1.5, -1.5), "lines")
  ), class = "options")
}

theme_black

A black theme for black background presentations. Note that using this typically involves changing the colour/fill aesthetics for viewing.

theme_black <- function (base_size = 12){
  structure(list(
    axis.line = theme_blank(), 
    axis.text.x = theme_text(size = base_size * 0.8, colour = 'white', lineheight = 0.9, vjust = 1), 
    axis.text.y = theme_text(size = base_size * 0.8, colour = 'white', lineheight = 0.9, hjust = 1), 
    axis.ticks = theme_segment(colour = "white", size = 0.2), 
    axis.title.x = theme_text(size = base_size, colour = 'white', vjust = 1), 
    axis.title.y = theme_text(size = base_size, colour = 'white', angle = 90, vjust = 0.5), 
    axis.ticks.length = unit(0.3, "lines"), 
    axis.ticks.margin = unit(0.5, "lines"), 
    legend.background = theme_rect(colour = NA), 
    legend.key = theme_rect(colour = "white", fill = 'black'), 
    legend.key.size = unit(1.2, "lines"), 
    legend.key.height = NA, 
    legend.key.width = NA,     
    legend.text = theme_text(size = base_size * 0.8, colour = 'white'), 
    legend.title = theme_text(size = base_size * 0.8, face = "bold", hjust = 0, colour = 'white'), 
    legend.position = "right", 
    legend.text.align = NA, 
    legend.title.align = NA, 
    legend.direction = "vertical", 
    legend.box = NA,    
    panel.background = theme_rect(fill = "black", colour = NA), 
    panel.border = theme_rect(fill = NA, colour = "white"), 
    panel.grid.major = theme_line(colour = "grey20", size = 0.2), 
    panel.grid.minor = theme_line(colour = "grey5", size = 0.5), 
    panel.margin = unit(0.25, "lines"), 
    strip.background = theme_rect(fill = "grey30", colour = "grey10"), 
    strip.text.x = theme_text(size = base_size * 0.8, colour = 'white'), 
    strip.text.y = theme_text(size = base_size * 0.8, colour = 'white', angle = -90), 
    plot.background = theme_rect(colour = 'black', fill = 'black'), 
    plot.title = theme_text(size = base_size * 1.2), 
    plot.margin = unit(c(1, 1, 0.5, 0.5), "lines")
  ), class = "options")
}

Comparison of themes

library(grid)
themes.list <- list("theme_grey", "theme_black", "theme_bw", "theme_fullframe",
                    "theme_minimal", "theme_minimal_cb",
                    "theme_minimal_cb_L","theme_minimal_light"
                    )
     
mdf <- data.frame(x <- seq(0, 10), y=rnorm(x), 
                  f=factor(rep(letters[1:2], each=3, length=length(x))))

## test with facets 
## p <- qplot(x, y, data=mdf, colour=f, geom=c("line", "point"), facets=f~.) 
p <- qplot(x, y, data=mdf, colour=f, geom=c("line", "point")) +
  scale_x_continuous(expand=c(0,0))+
  scale_y_continuous(expand=c(0,0))


all.themes <- lapply(themes.list, function(.t) {
  gTree(children=gList(ggplotGrob(p + get(.t)()),
          rectGrob(),
          textGrob(bquote(italic(.(.t))),
                   y=1, vjust=1.2, gp=gpar(col="grey"))))
})

library(gridExtra)
library(imguR)

imguR(width=8, height=16)
do.call(grid.arrange, c(all.themes, list(ncol=2)))
cat(dev.off())
⚠️ **GitHub.com Fallback** ⚠️