2013-09-03 10 views
5

Chciałbym group moje dane na podstawie interakcji dwóch zmiennych, ale tylko mapować estetyczne do jednej z tych zmiennych. (Druga zmienna reprezentuje powtórzenia, które teoretycznie powinny być sobie równoważne). Mogę znaleźć nieelegancki sposób, aby to zrobić, ale wydaje się, że powinien być bardziej elegancki sposób na to.`geom_line()` łączy punkty mapowane z różnymi grupami

Na przykład

# Data frame with two continuous variables and two factors 
set.seed(0) 
x <- rep(1:10, 4) 
y <- c(rep(1:10, 2)+rnorm(20)/5, rep(6:15, 2) + rnorm(20)/5) 
treatment <- gl(2, 20, 40, labels=letters[1:2]) 
replicate <- gl(2, 10, 40) 
d <- data.frame(x=x, y=y, treatment=treatment, replicate=replicate) 

ggplot(d, aes(x=x, y=y, colour=treatment, shape=replicate)) + 
    geom_point() + geom_line() 

enter image description here

To prawie robi to dobrze, poza tym, że nie chcę, aby reprezentować punkty o różnych kształtach. Wydaje się group=interaction(treatment, replicate) pomogłoby (np na podstawie this question, ale geom_line() nadal łączy punkty w różnych grupach:

ggplot(d, aes(x=x, y=y, colour=treatment, group=interaction("treatment", "replicate"))) + 
    geom_point() + geom_line() 

enter image description here

mogę rozwiązać ten problem, ręcznie tworząc kolumnę interakcji i group ing przez to:

d$interact <- interaction(d$replicate, d$treatment) 

ggplot(d, aes(x=x, y=y, colour=treatment, group=interact)) + 
    geom_point() + geom_line() 

enter image description here

, ale wydaje się, że powinno być więcej ggplot2 -natywny sposób uzyskania geom_line, aby łączyć tylko punkty z tej samej grupy.

+1

Dlaczego wstawiasz "interakcja (" traktuj "," replikuj ")" w drugim przykładzie, a nie faktyczne nazwy kolumn? Dla mnie 'grupa = interakcja (leczenie, replikacja)' daje oczekiwany wynik –

+0

możliwy duplikat [grupy przez dwie kolumny w ggplot2] (http://stackoverflow.com/questions/9968976/group-by-two-columns-in- ggplot2) –

+0

Różnica polega na tym, że w cytowanym pytaniu (które pierwotnie miałem zamiar połączyć, teraz edytowałem, aby dodać link) odpowiedź _does_ używa cytatów - ale używa też 'qplot'. Domyślam się, że 'qplot' potrzebuje zmiennych w cudzysłowach, podczas gdy' ggplot' pobiera je bezpośrednio. –

Odpowiedz

5

Twój kod działa, jeśli wykonasz następujące czynności. Myślę, że masz problem, ponieważ potraktował jako wektory, więc był równoważny z group = 1.

Powiązane problemy