2010-01-22 20 views
5

Ich habe einen fast-boxplot wie Jitter-Plot:hinzufügen Untergruppe Etikett zu einem Jitter Grundstück in ggplot2

dt <- rbind(se,cb,cb.se) 
qplot(ds, size, data=dt, geom="jitter", colour=root, facets = test ~ .) 

plot http://i50.tinypic.com/1zbfjih.png

Ich würde gerne eine Zusammenfassung Etikett für jede Gruppe in der Mitte platzieren die Handlung - hier zum Beispiel beträgt die Größe:

aggregate(list(size=dt$size), list(dt$ds, dt$test), sum) 

    Group.1 Group.2 size 
1  b217  se 9847 
2  c10  se 97296 
3  c613  se 21633 
4  c7  se 207540 
... 

ich habe versucht + geom_text(aes(x=ds, y=128, label=sum(size)), size=2) mit Etikett hinzuzufügen, aber ich habe das gleiche Etikett auf jede Position - wie kann ich die Summe bekommen nur dieser Teil der Daten?

Edit: Hier ist, wo ich jetzt bin - ich erhalte ein undefined columns selected Fehler ... irgendwo - vielleicht

data <- rbind(se,cb,cb.se) 
labels <-ddply(data, c("ds", "test"), function(df) sum(df$size)) 
ggplot(data=data, aes(x=ds)) + 
    geom_jitter(aes(y=size, colour=root)) + 
    geom_text(data=labels, aes(x=ds, y=600, label=V1), size=3) + 
    facet_wrap(test ~ .) 

Dieser Code funktioniert nicht Ich bin nur in der falschen Richtung . Vielleicht liegt es an den mehreren data= Sektionen?

+0

Von einem schnellen lesen zu schaffen, dass Code sieht für mich in Ordnung. Ohne ein reproduzierbares Beispiel ist es schwer, mehr zu sagen. – hadley

+1

Ich habe eine Lösung gepostet. Da Sie keine Beispieldaten bereitgestellt haben, musste ich leider Zufallsdaten neu erstellen. Dies bedeutet, dass die Lösung möglicherweise Ihre eigenen Daten widerspiegelt. Zukünftig werden Sie mehr Antworten erhalten, wenn Sie ein minimales Beispiel Ihres Problems machen und einige Beispieldaten einfügen, die wir alle verwenden können, um Ihr Problem zu reproduzieren. Wie auch immer, ich hoffe es hilft. – Andrie

Antwort

6

Da Sie keine Beispieldaten bereitstellen, soll ich eine Lösung mit zufälligen Daten demonstrieren.

set.seed(1) 
n <- 100 
dat <- data.frame(
    ds = sample(paste("x", 1:8, sep=""), n, replace=TRUE), 
    size = runif(n, 0, 250), 
    root = sample(c(TRUE, FALSE), n, replace=TRUE), 
    test = sample(c("se", "cb", "cb.se"), n, replace=TRUE) 
) 


head(dat) 
    ds  size root test 
1 x3 163.68098 TRUE cb.se 
2 x3 88.29932 TRUE se 
3 x5 67.56504 FALSE cb 
4 x8 248.17102 TRUE cb 
5 x2 158.37332 TRUE cb 
6 x8 53.30203 FALSE cb.se 

p <- ggplot(dat, aes(x=ds, y=size)) + 
    geom_jitter(aes(colour=root)) + 
    facet_grid(test~.) 

Erstellen Sie den Datenrahmen, der die Etikettendaten enthält. Beachten Sie die Verwendung von summarize. Dies sagt ddply eine neue Spalte der data.frame

labels <- ddply(dat, .(ds, test), summarize, size=round(sum(size), 0)) 
head(labels) 
    ds test size 
1 x1 cb 193 
2 x1 cb.se 615 
3 x1 se 274 
4 x2 cb 272 
5 x2 cb.se 341 
6 x2 se 1012 

p + geom_text(aes(x=ds, label=size, y=128), data=labels, size=2) 

enter image description here

+0

Das sieht genau so aus, wie ich es brauchte. Vielen Dank! – Thelema

+1

@Thelema, froh, dass ich helfen konnte. (Denken Sie daran, das Kopfgeld zuzuteilen, da dies nicht automatisch geschieht) – Andrie

+0

gut verdient. nett. und schnell :) –

1

Werfen Sie einen Blick hier. Es kann hilfreich sein Adding direct labels to ggplot2 and lattice plots

+0

directlabels löst mein Problem nicht, es positioniert sich nicht gut auf Jitter-Plots, und es möchte meine Legende Etiketten verwenden, um das Diagramm anstelle von bereitgestellten Etiketten zu beschriften. – Thelema

Verwandte Themen