2013-05-01 19 views
8

Próbuję wykreślić 2 linie ciągłe w 2 różnych kolorach dla każdej grupy, ale także dodać przerywane linie tego samego koloru wokół tych linii, a następnie dodać legendę . Z jakiegoś powodu mam problem z używaniem "przerywanych" lub "przerywanych", wydaje się, że dwa razy rysuję linie przerywane. Nie otrzymuję również legendy, otrzymuję błąd Adding another scale for 'colour', which will replace the existing scale.ggplot2 narysuj linie przerywane o tym samym kolorze, co linie ciągłe należące do różnych grup

Czy możesz mi pomóc wyjaśnić, co robię źle? Oto przykład zbiór danych, a co próbowałem:

x <- c(10, 20, 50, 10, 20, 50) 
mean = c(52.4, 98.2, 97.9, 74.1, 98.1, 97.6) 
group = c(1, 1, 1, 2,2,2) 
upper = c(13.64, 89, 86.4, 13.64, 89, 86.4) 
lower = c(95.4, 99.8, 99.7, 95.4, 99.8, 99.7) 
data <- data.frame(x=x,y=mean, group, upper, lower) 

ggplot(data, aes(x = x, y= mean, group = as.factor(data$group), colour=as.factor(data$group))) + geom_line() + geom_point() + geom_line(data=data,aes(x=x, y=lower, group = as.factor(data$group), colour=as.factor(data$group), linetype="dotted")) + geom_line(data=data,aes(x=x, y=upper, group = as.factor(data$group), colour=as.factor(data$group), linetype="dotted")) + scale_color_manual(values=c("red", "blue")) + scale_colour_discrete(name="Groups") 

Próbowałem również z geom_ribbon, ponownie bez powodzenia dla grupy części ...

ggplot(data, aes(x = x, y= mean, group = group)) + geom_line() + 
geom_ribbon(aes(ymin = lower, ymax = upper)) + 
geom_line(aes(y = mean), colour = "Mean")) + 
scale_colour_manual(name = "", values = c("Group1", "Group2")) 

Odpowiedz

23

Aby dodać przerywane linie należy dodać 2 geom_line() zadzwoń, podając, gdzie podajesz wartości y wewnątrz aes(). Nie ma potrzeby wstawiania argumentów data= i groups=, ponieważ są one takie same jak w wywołaniu ggplot(). linetype="dotted" należy umieścić poza rozmową aes(). Do kolorów potrzebujesz tylko jednego scale_color_manual(). Aby usunąć przerywaną linię z legendy, można zastąpić estetykę za pomocą funkcji guides() i guide_legend().

ggplot(data, aes(x = x, y= mean, group = as.factor(data$group), 
          colour=as.factor(data$group))) + 
    geom_line() + geom_point() + 
    geom_line(aes(y=lower),linetype="dotted") + 
    geom_line(aes(y=upper),linetype="dotted")+ 
    scale_color_manual(name="Groups",values=c("red", "blue"))+ 
    guides(colour = guide_legend(override.aes = list(linetype = 1))) 

enter image description here

+0

Dziękuję Didzis! Również za wyjaśnienie! Ciągle wygląda na to, że linie ciągłe są najpierw wykropkowane, a potem solidne ... W każdym razie jest o wiele bliższe temu, co próbowałem zrobić! – user2337032

+0

Dokładnie tego szukałem (to dziwne tworzenie kropkowanej linii przy użyciu moich prawdziwych danych, ale mam nadzieję, że uda mi się to naprawić, zmieniając rozmiar głównych linii). Dziękuję Ci! – user2337032

+0

@ user2337032 Zaktualizowano moją odpowiedź, aby rozwiązać problem, który linia przerywana została pokazana w legendzie. –