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.


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)
)

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í


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)

¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.