2012-04-01 12 views
56

Ist es möglich, nach zwei Spalten zu gruppieren? Also das Kreuzprodukt wird gezeichnet von und geom_smooth()?Gruppe nach zwei Spalten in ggplot2

Als Beispiel:

frame <- data.frame(series <- rep(c('a', 'b'), 6), sample <- rep(c('glass', 
'water', 'metal'), 4), data <- c(1:12)) 

ggplot(frame, aes()) # ... 

Derart, dass die Punkte 6 und 12 Aktien eine Gruppe, aber nicht mit 3.

Antwort

23

Warum nicht einfach paste diese beiden Spalten zusammen und verwenden, dass Variable als Gruppen?

frame$grp <- paste(frame[,1],frame[,2]) 

Eine etwas formelle Art und Weise, dies zu tun interaction die Funktion zu verwenden wäre.

+11

Ich glaube, Sie nicht Ihr ändern sollten 'data.frame' für den Zweck einer Handlung. Der "Plot" sollte Ihr df und nicht das Gegenteil grafisch darstellen. – clemlaflemme

+1

Ich stimme zu, Blue Magisters Antwort ist besser. – JestonBlu

+2

@clemlaflemme Ich denke BlueMagisters Antwort ist in Ordnung, obwohl ich denke, dass die Unterscheidung in diesem Fall ziemlich gering ist. Aber die allgemeine Position, dass man seinen Datenrahmen für einen Plot nicht ändern sollte, ist ein kurioser, da man sich für ** ggplot2 ** entschieden hat, dessen gesamter Entwurf davon ausgeht, dass man seine Daten explizit mit der Semantik von ggplot strukturiert. – joran

52

zum Beispiel:

qplot(round, price, data=firm, group=id, color=id, geom='line') + 
     geom_smooth(aes(group=interaction(size, type))) 
84

Am Beispiel von this question, interaction mit zwei Spalten in einen neuen Faktor zu kombinieren:

# 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, 
    group=interaction(treatment, replicate))) + 
    geom_point() + geom_line() 

ggplot example

Verwandte Themen