Draw Plot with Two Y-Axes in R (Example)


In this R programming tutorial you’ll learn how to create a plot with two y-axes in Base R.

Table of contents:

Here’s how to do it:


Creation of Example Data

First, we need to create some example data for the plot of this example:

set.seed(25852)                             # Create example data
x <- rnorm(30)
y1 <- x + rnorm(30)
y2 <- x + rnorm(30, 5)

Our example data consists of three numeric vectors: x, y1, and y2.

Now, let’s plot these data!


Example: Create Plot with 2 Axes in R

If we want to draw a plot with two different y-axes, we can use the following R code:

par(mar = c(5, 4, 4, 4) + 0.3)              # Additional space for second y-axis
plot(x, y1, pch = 16, col = 2)              # Create first plot
par(new = TRUE)                             # Add new plot
plot(x, y2, pch = 17, col = 3,              # Create second plot without axes
     axes = FALSE, xlab = "", ylab = "")
axis(side = 4, at = pretty(range(y2)))      # Add second axis
mtext("y2", side = 4, line = 3)             # Add second axis label


plot with two y axes in r

Figure 1: Plot with 2 Y-Axes in R.


Figure 1 is illustrating the output of the previous R syntax. As you can see, we created a scatterplot with two different colors and different y-axis values on the left and right side of the plot.

How did we do that? Let’s deconstruct the code:

  1. par(mar = c(5, 4, 4, 4) + 0.3) – This code defines how much white space should be shown around the plot. It is important to leave enough space for the second y-axis.
  2. plot(x, y1, pch = 16, col = 2) – This code creates the first plot (i.e. the red dots).
  3. par(new = TRUE) – This code specifies that we want to overlay a second plot.
  4. plot(x, y2, pch = 17, col = 3, axes = FALSE, xlab = “”, ylab = “”) – This code draws the second plot (i.e. the green triangles).
  5. axis(side = 4, at = pretty(range(y2))) – This code adds the axis labels on the right side.
  6. mtext(“y2”, side = 4, line = 3) – This code adds the name of the second y-axis (i.e. y2).

Note that this code is adapted from this thread on Stack Overflow. Have a look at this thread for more examples of the plotting of multiple axes.

Also note that we used a scatterplot for this example. However, you may add a secondary axis to many different types of graphics such as boxplots, line charts, histograms, density plots, and so on…


Video, Further Resources & Summary

I have recently released a video on my YouTube channel, which explains the R programming code of this tutorial. You can find the video below:


Please accept YouTube cookies to play this video. By accepting you will be accessing content from YouTube, a service provided by an external third party.

YouTube Content Consent Button Thumbnail

YouTube privacy policy

If you accept this notice, your choice will be saved and the page will refresh.


Furthermore, you might want to have a look at the related tutorials on my homepage:


In summary: This article explained how to add dual axes to a plot in the R programming language. Don’t hesitate to let me know in the comments, in case you have further comments or questions.


Subscribe to the Statistics Globe Newsletter

Get regular updates on the latest tutorials, offers & news at Statistics Globe.
I hate spam & you may opt out anytime: Privacy Policy.

26 Comments. Leave new

Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.