# ggthemes reproduces the look of a publication, palette and all

> ggthemes adds themes, scales and geoms to ggplot2 that reproduce the look of well known publications and software, and of the graphics advocated by Edward Tufte and Stephen Few, with each theme paired with a matching colour scale. The package is on CRAN, marked stable by the r-lib lifecycle badge, and version 7.0.0 was published on 2026-10-03.

**jrnold/ggthemes** — Additional themes, scales, and geoms for ggplot2

- Repository: https://github.com/jrnold/ggthemes
- Website: http://jrnold.github.io/ggthemes/
- Stars: 1,353 · Forks: 224
- Language: R
- License: not declared
- Published: 2026-10-19 · Updated: 2026-10-19 · Language: en
- Canonical page: https://hysenlabs.com/projects/jrnold-ggthemes

## A theme and a palette, shipped as a pair

The idea behind ggthemes is that reproducing a publication's look is two jobs, not one. A theme sets the grid, the axes, the typography and the background, and a scale sets the colours, and if you only take one of them the result is half convincing. The package therefore ships both, and the convention is that a theme has a matching scale with the same name, so a chart is drawn by adding a theme and then a scale:

```r
p1 + theme_economist() +
  scale_colour_economist()
```

The theme and the scale are separate additions to the plot rather than a single object, which keeps them composable with anything else in ggplot2 and means you can take the Economist's grey grid and a different palette if you want one. The scope is stated in the package description, themes, scales and geoms that reproduce the look of well known publications and software, and of the graphics advocated by Edward Tufte and Stephen Few. The audience is a data journalist or analyst who has been handed a screenshot of a chart and been asked to produce something that looks like it.

## The list spans newspapers, spreadsheets and software

The theme list is longer than most people expect, and it is organised by the thing being imitated. There are themes after The Economist, The Wall Street Journal, FiveThirtyEight, Excel, LibreOffice Calc, Google Docs, Highcharts, Apple Numbers and Stata, plus Solarized, base R graphics and more, and the documentation states that every theme is shown with its matching colour scale where it has one. The mix is revealing. The Economist and the Wall Street Journal are print publications whose house styles change rarely, so those themes age well. Excel, LibreOffice Calc, Google Docs and Apple Numbers are software, and software restyles, which is why the package also carries theme_excel_new() alongside theme_excel(), an older and a newer version of the same look. Tufte and Few represent a different argument, about how much ink a chart should use, rather than whose chart to copy.

## Palettes, including the colourblind-safe ones

The scales are described as colour, shape and linetype scales and palettes to match, and two of the palettes are called out by name, colourblind-safe and Tableau. That colourblind-safe entry matters, because a palette copied from a newspaper is not necessarily legible to every reader, and ggthemes keeps accessibility palettes alongside the imitative ones, with a gallery page on the package site that shows them side by side. The matching scale naming follows the same pattern as the themes, so a theme for a given publication and its colour scheme share a name, which is what makes the two-line addition above the intended way to use the package. The scales also cover shape and linetype, not only colour, which is the detail that matters for greyscale printing and for readers who cannot rely on hue alone, and it is a reminder that a chart theme in this package is a system rather than a colour choice.

## Tufte's geoms and choosing an aspect ratio for a slope

The third category is geoms, and it is where the package goes beyond imitation. There are geoms for Tufte's range frames and minimal box plots, which are the two devices from Tufte's argument about data ink ratio, and there are tools for banking to 45 degrees, documented on a page of their own, whose purpose is to choose a plot's aspect ratio. That last one is a real analytical tool rather than a style, because the slope of a line in a scatterplot changes with the aspect ratio of the panel, and a chart meant to show a rate of change has to be drawn at a particular angle to be read honestly. The README's own example shows how the themes interact with this, with a comment noting that theme_map() intentionally removes the axes and should be used with geographic data rather than a scatterplot, and that theme_solid() is likewise intended to leave only the geoms. Those are the kinds of constraints that make a theme library more than a set of colour presets.

## Installing from CRAN or from the GitHub branch

The released version comes from CRAN:

```r
install.packages("ggthemes")
```

and the development version comes from GitHub, which the README shows through the pak package:

```r
# install.packages("pak")
pak::pak("jrnold/ggthemes")
```

The choice matters for a report you are going to publish, because the CRAN version is the one that has been through R CMD check and the CRAN review process, while the GitHub version is whatever is on the main branch at the moment. The repository carries a cran-comments.md, which is where the notes submitted with a CRAN release live, and the version number follows the release date, with 7.0.0 published on 2026-10-03 and the last push on 2026-10-14. The package also advertises an r-lib lifecycle badge marking it stable, which is a stronger statement than the version number alone, since it means the maintainer intends the public interface to keep working.

## The Makefile shows how the site and the data are built

The repository is a well-organised R package, and the Makefile is the map of it. The default target builds docs, site and data in sequence. docs runs devtools::document() to regenerate the Rd documentation, site runs pkgdown::build_site() to build the reference website, and data runs the script data-raw/build.R, which is how the datasets the package ships are produced rather than hand-edited. The test target runs devtools::check(), which is the full R CMD check, lint runs devtools::lint() against the .lintr configuration, and style runs a formatting script under scripts/. The README itself is generated, with a rule that knits README.Rmd into README.md, and a comment at the top of the file says so, so edits go to the R Markdown source. There is also a .pre-commit-config.yaml, an air.toml for the formatter, a _pkgdown.yml for the site configuration, a vignettes/ directory, tests/ and a data/ directory, and an R/ directory for the code itself.

## When copying a house style is the wrong answer

Three limits are worth being clear about. The first is that a copied theme is a snapshot, and the organisations being copied update. The Economist changes its charts when it redesigns, Excel changes its defaults with releases, and a theme that matched a publication two years ago may now be a past edition of it, which is exactly the gap that theme_excel() and theme_excel_new() expose. The second is that a house style is not a brand imitation. A chart in an Economist theme is a chart that looks like the Economist, which is a different and often a worse outcome than a chart that looks like your organisation, since the latter is a decision you make and the former is a borrowed one. The third is technical: a theme depends on the internals of ggplot2's rendering system, so a major ggplot2 release can change what a theme does. The alternative approach, and the one to weigh, is to write your own theme with the theme() arguments and keep the palette in your own package, which gives you a look that is yours and that you can update when ggplot2 does, at the cost of doing the work that ggthemes has already done for a dozen looks you may not want.

## Conclusion

ggthemes is the right package when a chart has to look like it belongs to a specific publication, a house style or a piece of software, because it saves you from reverse engineering a grid, a font stack and a palette from screenshots, and because the theme and its colour scale are shipped as a matched pair rather than as two things you assemble yourself. It is the wrong tool when you want a house style of your own, since a theme copied from The Economist is not your style, and the wrong tool when the look you need is a recent redesign, because a theme is only as current as the last time somebody updated it. Before adopting it, check whether the specific theme you want exists and whether a newer version of the same brand has been released, since the package carries both theme_excel() and theme_excel_new(), and keep the ggplot2 version in mind, since a theme depends on ggplot2 internals that can move.

## FAQ

### How do I install ggthemes?

The released version installs from CRAN with install.packages("ggthemes"), and the development version comes from GitHub with pak::pak("jrnold/ggthemes"), where the README shows the pak package commented out for installation. The current release is 7.0.0 from 2026-10-03.

### Which themes does ggthemes include?

Themes after The Economist, The Wall Street Journal, FiveThirtyEight, Excel, LibreOffice Calc, Google Docs, Highcharts, Apple Numbers, Stata, Solarized and base R graphics, plus themes for the graphics advocated by Edward Tufte and Stephen Few, and each theme is shown with its matching colour scale where it has one.

### Does ggthemes ship colourblind-safe palettes?

Yes. The package provides colour, shape and linetype scales and palettes to match the themes, including colourblind-safe palettes and Tableau palettes, with a gallery page on the package site showing them.

### What is bank_slopes in ggthemes?

It is one of the tools for banking to 45 degrees, whose purpose is to choose a plot's aspect ratio. The slope of a line in a scatterplot depends on the panel proportions, so banking to 45 degrees makes a rate of change read honestly, and the package also offers geoms for Tufte's range frames and minimal box plots.

## Sources

- [Issues](https://github.com/jrnold/ggthemes/issues)
- [jrnold/ggthemes on GitHub](https://github.com/jrnold/ggthemes)
- [Project website](http://jrnold.github.io/ggthemes/)
- [README](https://github.com/jrnold/ggthemes/blob/main/README.md)
- [Releases](https://github.com/jrnold/ggthemes/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/jrnold-ggthemes
