Ggplot combining two graphs from different data.frames

I want to combine two ggplots, from two different data.frames, into one plot. Below you will find the code. I want to combine graph 1 and graph 2 or graph 3 & 4.

df1 <- data.frame(p=c(10,8,7,3,2,6,7,8), v=c(100,300,150,400,450,250,150,400)) df2 <- data.frame(p=c(10,8,6,4), v=c(150,250,350,400)) plot1 <- qplot(df1$v, df1$p) plot2 <- qplot(df2$v, df2$p, geom="step") plot3 <- ggplot(df1, aes(v, p)) + geom_point() plot4 <- ggplot(df2, aes(v, p)) + geom_step() 

It should be very easy to do, but somehow I can't get it to work. Thank you for your time.

+42
r ggplot2
Feb 02 '12 at 8:26
source share
3 answers

As Batiste said, you need to specify a data argument at the geometry level. Or

 #df1 is the default dataset for all geoms (plot1 <- ggplot(df1, aes(v, p)) + geom_point() + geom_step(data = df2) ) 

or

 #No default; data explicitly specified for each geom (plot2 <- ggplot(NULL, aes(v, p)) + geom_point(data = df1) + geom_step(data = df2) ) 
+48
Feb 02 2018-12-12T00:
source share

The only working solution for me was to define a data object in geom_line instead of the base ggplot object.

Like this:

 ggplot() + geom_line(data=Data1, aes(x=A, y=B), color='green') + geom_line(data=Data2, aes(x=C, y=D), color='red') 

instead

 ggplot(data=Data1, aes(x=A, y=B), color='green') + geom_line() + geom_line(data=Data2, aes(x=C, y=D), color='red') 

More here

+27
Apr 14 '14 at 8:33
source share

You can use this trick to use qplot only. Use the internal $mapping variable. You can even add color = to your plots so that they are also placed in cartography, and then your plots combined with legend and colors automatically.

 cpu_metric2 <- qplot(y=Y2,x=X1) cpu_metric1 <- qplot(y=Y1, x=X1, xlab="Time", ylab="%") combined_cpu_plot <- cpu_metric1 + geom_line() + geom_point(mapping=cpu_metric2$mapping)+ geom_line(mapping=cpu_metric2$mapping) 
+2
Jun 06 '13 at 14:48
source share



All Articles