ggplot combinando dos gráficos de diferentes marcos de datos

81

Quiero combinar dos ggplots, de dos data.frames diferentes, en un solo gráfico. A continuación encontrará el código. Quiero combinar la parcela 1 y 2 o las parcelas 3 y 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()

Esto debe ser muy fácil de hacer, pero de alguna manera no puedo hacerlo funcionar. Gracias por tu tiempo.

jeroen81
fuente
8
utilizando la ggplot()sintaxis, puede especificar los datos que se utilizarán para cada capa individual, por ejemplogeom_step(data=df2)
baptiste

Respuestas:

78

Como dijo Baptiste, debe especificar el argumento de datos en el nivel geom. Ya sea

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

o

#No default; data explicitly specified for each geom
(plot2 <- ggplot(NULL, aes(v, p)) + 
      geom_point(data = df1) +
      geom_step(data = df2)
)
Richie algodón
fuente
31
@ naught101 Los paréntesis más externos son un truco para hacer que el gráfico se imprima en la misma línea que su asignación. También puedes usar este truco con otras variables. (my_variable <- 1:5)es una versión más limpia de my_variable <- 1:5; my_variable.
Richie Cotton
62

La única solución funcional para mí fue definir el objeto de datos en geom_line en lugar del objeto base, ggplot.

Me gusta esto:

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

en vez de

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

Más info aquí

Andries
fuente
3

Puede tomar este truco para usar solo qplot. Utilice variable interna $mapping. Incluso puede agregar color = a sus gráficos para que esto también se incluya en el mapeo, y luego sus gráficos se combinarán con la leyenda y los colores automáticamente.

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)
Alexander.Iljushkin
fuente
¿Cómo puedo poner dos colores usando este enfoque?
Wagner Jorge
1
@WagnerJorge intenta leer qplot docs y agrega color al inicializar cpu_metric2, me gusta qplot(y=..., x=..., colour=...), luego agrega color adentrogeom_line(mapping..., colour=...)
Alexander.Iljushkin