2012-06-28 13 views
5

Mam dwa wykresy z tą samą osią x - zakres x wynosi 0-5 w obu. Chciałbym połączyć oba z nich na jednym wykresie i nie znalazłem poprzedniego przykładu. Oto co mam:Wykreślanie dwóch zmiennych za pomocą ggplot2 - ta sama oś 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") 

Jak mogę je połączyć? Oś y to "często prywatność", a na każdym wykresie oś X to "często publikowane" lub "często czytane". Pomyślałem, że mogę je łatwo połączyć (w jakiś sposób), ponieważ zakres wynosi 0-5 w obu.

Wielkie dzięki!

+2

Jest to dość łatwe przez przekształcanie ('reshape2 :: melt'), a następnie za pomocą estetycznych, takich jak kolor (lub po prostu grupa) do odróżnienia dwie zmienne. Trzeba "stopić" w taki sposób, aby zachować "często_prywatność" jako zmienną id. Jeśli opublikujesz mały podzbiór danych (z 'dput'), na pewno dostaniesz odpowiedź. –

Odpowiedz

4

Możesz użyć +, aby połączyć inne działki na tym samym obiekcie ggplot. Na przykład, do wykreślenia punktów i wygładzonych linii dla obu par kolumn:

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

to ładnie odpowiada na pytanie, chociaż moim zdaniem powyższy komentarz sugeruje bardziej "idiomatyczny" sposób na to (co między innymi zapewnia (1) automatyczną legendę (2) bardziej zwartego kodu [chociaż tylko dla dwóch zmiennych nie ma duża zaleta]) –

10

kod Przykład rozwiązania 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

Spróbuj tego:

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

Powiązane problemy