2012-02-02 20 views
43

Quiero combinar dos ggplots, desde dos data.frames diferentes, en un solo gráfico. A continuación encontrará el código. Quiero combinar la parcela 1 & 2 o 3 parcelas & 4.ggplot combinando dos gráficos de diferentes data.frames

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 por alguna razón no puedo conseguir que funcione. Gracias por tu tiempo.

+5

usando 'ggplot()' sintaxis, puede especificar los datos que desea utilizar para cada capa individual, por ejemplo, 'geom_step (data = df2)' – baptiste

+0

Gracias, esto funciona perfecto. – jeroen81

Respuesta

49

Como dijo Baptiste, debe especificar el argumento de datos en el nivel geom. De cualquier

#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) 
) 
+20

@ naught101 Los paréntesis más externos son un truco para hacer que el trazado se imprima en la misma línea que su asignación. Puedes usar este truco con otras variables también. '(my_variable <- 1: 5)' es una versión más limpia de 'mi_variable <- 1: 5; mi_variable'. –

2

que puede tomar este truco para usar sólo qplot. Use la variable interna $mapping. Incluso puede agregar color = a sus gráficos, de modo que esto también se aplicará al mapeo, y luego sus tramas 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) 
+0

¿cómo puedo poner dos colores usando este enfoque? –

+1

@WagnerJorge intente leer qplot docs y agregue color al inicializar cpu_metric2, como 'qplot (y = ..., x = ..., color = ...)', luego agregue color dentro de 'geom_line (mapping ... , color = ...) ' –

28

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

De esta manera:

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

en lugar de

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

More info here

Cuestiones relacionadas