We are R-Ladies Profile picture
Rotating Curator for the @RLadiesGlobal community #RLadies (currently on a brief break)

Nov 29, 2022, 14 tweets

Day 2: Building your very own ggplot theme.

Here are three reasons why I think you should do this:
- Help orient your readers with text hierarchy
- Give everything some space to breathe
- Achieve effortless consistency with one extra line of code

Sound good? Let's dig in!

My starting point for creating a custom theme is typically theme_minimal(). It has sensible defaults such as relative text size and margins that we can build on, by just replacing some elements.

plot +
theme_minimal() +
theme(customise here)

Here's our plot with theme_minimal()

Text hierarchy is one of those things it's so much easier to demonstrate than to explain. Take a look at this image. (© Chaosamran_Studio)

What it demonstrates is that the way we format our text guides readers as to what's most important and what we don't mind them skipping.

What goes into text hiearchy? Three things that we can easily change within a ggplot theme:

1) Text colour. Pick as many variants on your text colour as you think you need. Here, I've used two, based on the dark text colour of my website (which is based on the blue/grey strip)

To create those variants, I used {monochromeR}, going darker from my website's blue/grey colour to create a dark text colour, and going lighter from there to create some lighter text colours.

2) Fonts. Picking fonts can be really tricky, but there are some really great resources out there (see below, where we're back to our "let others help you" mantra!).

Here, I've simply applied the fonts from my own website, changing the family element of element_text().

3) Text size. You can manipulate text size within theme() either by setting absolute sizes (e.g. size = 16), or relative sizes (e.g. size = rel(1.2)).

The relative size is a good idea if you're going to reuse this theme: change the base size as needed and everything follows!

At this point, we've done most of the work, but we can still make our data story easier to take in by giving everything a bit more space to breathe.

First, let's move the legend to reduce unnecessary eye movements, fade the grid, and remove an unnecessary axis title.

And now let's change the base size, increase the default line height and add margins around the text elements and around the plot itself, using the acronym TRouBLe to remember the margin values go Top, Right, Bottom, Left (or clockwise from the top).

Tada!

Finally, let's package this up as a function we can easily reuse to create consistency across our project by just adding `+ theme_rladiesdemo()` to every plot.

Even with no effort to reconcile colours (see yesterday's thread for tips on that), it has a big impact!

And now for some resources (1/3):
- Font advice: @glyphe. Oliver runs a great weekly newsletter with font recommendations, and has some really practical resources on his site, including a free webinar from today which should be available to replay later.
pimpmytype.com/font-choice/

@glyphe Resources (2/3)
- Fonts specifically within #dataviz, we're back to @datawrapper: blog.datawrapper.de/fonts-for-data…
- Font troubleshooting for #rstats (and other fun stuff such as registering variants!), this blog post by @yjunechoe: yjunechoe.github.io/posts/2021-06-…

@glyphe @Datawrapper @yjunechoe - To view what each change to the theme does to the plot, flick through my @quarto_pub slides on building a custom theme: cararthompson.github.io/nhsr2022-ggplo…

(As an aside, I love how easy it is to create these step-by-step demos using Quarto!)

@glyphe @Datawrapper @yjunechoe @quarto_pub Over to you! What are your favourite fonts (and font pairs!) to use in #dataviz? Or do you have any font horror stories to share?

Would be great to see some examples of how you've added text hierarchy to your data visualisations!

Share this Scrolly Tale with your friends.

A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.

Keep scrolling