2012-06-28 43 views
5

Tengo dos gráficos con el mismo eje x - el rango de x es 0-5 en ambos. Me gustaría combinar ambos en un gráfico y no encontré un ejemplo anterior. Esto es lo que tengo:Trazado de dos variables usando ggplot2 - el mismo eje x

c <- ggplot(survey, aes(often_post,often_privacy)) + stat_smooth(method="loess") 
c <- ggplot(survey, aes(frequent_read,often_privacy)) + stat_smooth(method="loess") 

cómo puedo combinar? El eje y es "a menudo privacidad" y en cada gráfico el eje x es "a menudo publicación" o "lectura frecuente". Pensé que podía combinarlos fácilmente (de alguna manera) porque el rango es 0-5 en ambos.

¡Muchas gracias!

+2

Esto es bastante fácil mediante la remodelación ('reshape2 :: melt') y luego utilizando una estética como el color (o simplemente grupo) para distinguir las dos variables. Debes 'derretir' de tal forma que mantengas' often_privacy' como una variable de id. Si publica un pequeño subconjunto de sus datos (con 'dput'), estoy seguro de que obtendrá una respuesta. –

Respuesta

4

Puede usar + para combinar otras representaciones en el mismo objeto ggplot. Por ejemplo, para trazar puntos y líneas suavizadas para ambos pares de columnas:

ggplot(survey, aes(often_post,often_privacy)) + 
geom_point() + 
geom_smooth() + 
geom_point(aes(frequent_read,often_privacy)) + 
geom_smooth(aes(frequent_read,often_privacy)) 
+4

esto responde la pregunta muy bien, aunque creo que mi comentario anterior sugiere la forma más 'idiomática' de hacerlo (que entre otras cosas proporciona (1) una leyenda automática (2) código más compacto [aunque para solo dos variables no hay un gran ventaja]) –

10

Código de ejemplo para la solución de Ben.

#Sample data 
survey <- data.frame(
    often_post = runif(10, 0, 5), 
    frequent_read = 5 * rbeta(10, 1, 1), 
    often_privacy = sample(10, replace = TRUE) 
) 
#Reshape the data frame 
survey2 <- melt(survey, measure.vars = c("often_post", "frequent_read")) 
#Plot using colour as an aesthetic to distinguish lines 
(p <- ggplot(survey2, aes(value, often_privacy, colour = variable)) + 
    geom_point() + 
    geom_smooth() 
) 
0

Prueba esto:

df <- data.frame(x=x_var, y=y1_var, type='y1') 
df <- rbind(df, data.frame(x=x_var, y=y2_var, type='y2')) 
ggplot(df, aes(x, y, group=type, col=type)) + geom_line() 

enter image description here

Cuestiones relacionadas