Skip to content
R for the Rest of Us Logo

Use Annotations to Explain

This lesson is locked

Get access to all lessons in this course.


Click on the transcript to go to that point in the video. Please note that transcripts are auto generated and may contain minor inaccuracies.

Your Turn

Add an annotation somewhere on your chart to help the reader understand it better

Learn More

The best place to learn about the annotate() function is the ggplot documentation website. The online version of Hadley Wickham’s book ggplot2: Elegant Graphics for Data Analysis also has a chapter on annotations. And the website R Graph Gallery shows some examples of annotations in practice.

Placing annotations precisely can be challenging. The experimental package gganotate attempts to make it easier by enabling you to click on your plot and returning the x/y location to put in your code.

If you want to see the example plot used in this lesson, it is on the Financial Times website.

If you want to learn more about the importance of annotation in data visualization, check out this article from Elijah Meeks titled Making Annotations First-Class Citizens in Data Visualization. Also check out this article from Alberto Cairo discussing another example of work from the Financial Times that uses annotations well (folks at the FT are experts at annotations, in case you haven’t yet picked that up!).

I talk a lot in this lesson about colors. If you want to find lighter or darker shades, or just look for colors in general, check out the website

Have any questions? Put them below and we will help you out!

You need to be signed-in to comment on this post. Login.

Vuk Sekicki

Vuk Sekicki

May 20, 2021

I wonder how did financial times place those curved arrows, they look so cool.

David Keyes

David Keyes

May 20, 2021

Almost certainly with geom_curve() or annotate("curve"). You can see an example from Cedric Scherer's code. Image here: Code used to make it here:

Vuk Sekicki

Vuk Sekicki

May 21, 2021

annotate( "curve", x = 3.3, xend = 3.43, y = 15.9, yend = 15.08, curvature = .25, color = "grey55", size = .6, arrow = arrow(length = unit(0.09, "inches"), type = "closed")

I see this, only problem is playing with x and y coordinates is probably tricky. Maybe using ggannotate library. I'll have to try.



How does x = 2.02 work with a character variable?

David Keyes

David Keyes

January 17, 2023

It treats 1 as the first value, 2 as the second value, etc. Here's a quick annotated screenshot: Does that help?