Combine Two ggplot2 Plots from Different Data Frames in R (Example)


In this article you’ll learn how to draw a ggplot2 plot based on several different data sources in the R programming language.

Table of contents:

Let’s do this…


Example Data, Add-On Packages & Default Plot

Consider the following example data:

data1 <- data.frame(x = 1:5,        # Create first data frame
                    y = 1:5)
data1                               # Print first data frame
#   x y
# 1 1 1
# 2 2 2
# 3 3 3
# 4 4 4
# 5 5 5
data2 <- data.frame(x = 2:6,        # Create second data frame
                    y = 8:4)
data2                               # Print second data frame
#   x y
# 1 2 8
# 2 3 7
# 3 4 6
# 4 5 5
# 5 6 4

The previous RStudio console output shows the structure of our example data sets – Both data frames contains two numeric columns with the variable names x and y.

If we want to use the functions of the ggplot2 package, we also have to install and load ggplot2:

install.packages("ggplot2")         # Install ggplot2 package
library("ggplot2")                  # Load ggplot2 package

Now, we can move on to the example…


Example: Drawing ggplot2 Plot Based on Two Different Data Frames

This section shows how to use the ggplot2 package to draw a plot based on two different data sets.

For this, we have to set the data argument within the ggplot function to NULL. Then, we are specifying two geoms (i.e. geom_point and geom_line) and define the data set we want to use within each of those geoms.

ggp <- ggplot(NULL, aes(x, y)) +    # Draw ggplot2 plot based on two data frames
  geom_point(data = data1, col = "red") +
  geom_line(data = data2, col = "blue")
ggp                                 # Draw plot


r graph figure 1 combine two ggplot2 plots from different data frames r


Figure 1 visualizes the output of the previous R code – A ggplot2 graph created based on multiple different data matrices.


Video, Further Resources & Summary

If you need more information on the R programming codes of this article, you may watch the following video of my YouTube channel. In the video, I illustrate the content of this article.



Furthermore, I can recommend having a look at some of the other tutorials of this homepage:


Summary: In this article, I explained how to create a ggplot2 graph with two different data sets in the R programming language – a very nice method in case you want to add a new layer or series of data points to a ggplot2 plot. Let me know in the comments section, in case you have additional 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.

18 Comments. Leave new

  • Hi, how are you?
    I need your help!
    I have 2 data frame with 3 columns each one (with 264.000 rows). The columns “Id1” (first) and “Id2” (second) are the same in both files (.tsv).
    I tried to merge the columns Id1 and Id2 for two files but this result in an error: cannot allocate vector of size 972.2 Mb in R.
    I wanna plot (scatter plot) the numerical values in the third columns for the two different files: Val1 (third column for file 1) VS Val_1 (third column for file 2).
    Can you help me please?

  • Sudipta Roy
    March 2, 2021 1:23 pm

    I have a problem. I am working on two NetCDF files and I plotted them separately without having any problems. When I was combining them in one by following your method, “Error in FUN(X[[i]], …) : object ‘x’ not found” – this error keeps coming. What should I do? I want to plot from multiple NetCDF files in a single plot. Not to mention, spatial references, units and resolutions are same in the every files.

  • Your past saved me!
    Could you explain how to add the legend to the figure?
    I tried to add the legend but I could not do it.

    • Hi Sael,

      Thanks a lot, glad the tutorial helped!

      One solution would be to add the aes() function to both geoms, i.e.

      geom_point(data = data1, aes(col = "red")) +
      geom_line(data = data2, aes(col = "blue"))

      Note that this changes the colors to the default color palette of the ggplot2 package.



  • I got blow error:
    Error: Aesthetics must be either length 1 or the same as the data (5): y

    I have used data1 having 5 rows and data2 having 8 rows, how to solve this issue. How can I plot data from two different files having different number of rows.

    • Hey Ramki,

      I’m sorry for the late response, I just came back from holidays and did not have the chance to read your message earlier.

      Are you still looking for a solution to this problem?



  • Hello Joachim,

    I have the same doubt that Ramki. I want plot using differents dataset having differents number of rows.

  • Hello Joachim, I need your help. Do you know how to comine two pltos froms differents data frames (two different models of the library effects) For example:
    library (nlme)
    library (effects)
    m1<- lme(log(Ara_Tot+1) ~ FOREST+log(Ara_Tot_m+1)+log(Prey_ChinchFit_Lepidop+1), data= REDV, random = ~1|ANIO, method ="REML")
    eff_Forest<- effect("FOREST",m1, partial.residuals=TRUE)
    plot(eff_Forest, smooth.residuals=FALSE,lty=1,lines=list(col="black",lwd=2), residuals.color="black",band.colors="black",band.line ="black",lwd=3, main="Spiders, Before b. pod", ylab="% of forest")

    m2<- lme(log(Ara_Tot+1) ~ FOREST+log(Ara_Tot_m+1), data= PANV, random = ~1|ANIO, method ="REML")
    eff_Forest<- effect("FOREST",m2, partial.residuals=TRUE)
    plot(eff_Forest, smooth.residuals=FALSE,lty=1,lines=list(col="black",lwd=2), residuals.color="black",band.colors="black",band.line ="black",lwd=3, main="Spiders, Before b. pod", ylab="% of forest")

    I want to show in one graphic both variables of these two differents models.

    Could you help me??

  • Thank you Joachim! I wil try, but I think effects library cannot run with this option!
    Best regards, Silvana

    • It seems like you have used the plot function to draw your data before. I assume that the point function works as well, if the plot function works.


  • Hi, I have two data frame, both with the same number of columns, all named year, model and rain.
    But while in data frame 1 has four differents values in the column model (like model1, model2, model3, model4), the data frame 2 has only one value (model5).
    I want to plot a chart comparing the rain of each model of data frame 1 with the model of data frame 2 separetly.
    It would appear four panel comparing: model1xmodel5, model2xmodel5, model3xmodel5 and model4xmodel5


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.