2013-09-03 14 views
5

Ich möchte group meine Daten basierend auf der Interaktion von zwei Variablen, aber nur eine Ästhetik zu einer dieser Variablen zuordnen. (Die andere Variable stellt Replikate dar, die theoretisch einander äquivalent sein sollten). Ich kann unelegante Wege finden, dies zu tun, aber es scheint, dass es elegantere Wege geben sollte, dies zu tun.`geom_line()` verbindet Punkte zugeordnet zu verschiedenen Gruppen

Zum Beispiel

# 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

Die fast bekommt Recht, außer, dass ich will nicht die Punkte mit unterschiedlichen Formen darzustellen. Es scheint, wie group=interaction(treatment, replicate) helfen würde (zB basierend auf this question, aber geom_line() verbindet noch Punkte in verschiedenen Gruppen:

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

enter image description here

ich das Problem, indem Sie manuell eine Interaktion Spalte und group ing durch das lösen kann:

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

aber es scheint, als ob es eine ggplot2 -native Art und Weise geben sollte, geom_line zu bekommen, nur Punkte von der gleichen Gruppe zu verbinden.

+1

Warum setzen Sie 'Interaktion (" behandeln "," replizieren ")' im zweiten Beispiel nicht die tatsächlichen Namen der Spalten? Für mich "Gruppe = Interaktion (Behandlung, replizieren)" ergibt erwartetes Ergebnis –

+0

mögliches Duplikat von [Gruppe nach zwei Spalten in ggplot2] (http://stackoverflow.com/questions/9968976/group-by-two-columns-in- ggplot2) –

+0

Der Unterschied ist, dass in der zitierten Frage (die ich ursprünglich verlinken wollte, habe jetzt bearbeitet, um den Link hinzuzufügen) die Antwort _does_ Zitate verwenden - aber es verwendet auch 'qplot'. Ich denke, 'qplot' benötigt die Variablen in Anführungszeichen, während' ggplot' sie direkt übernimmt. –

Antwort

5

Ihr Code funktioniert, wenn Sie Folgendes tun. Ich glaube, du hattest ein Problem, weil aes"treat" und "replicate" als Vektoren behandelt wurden, also war es gleich group = 1.

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