Ich versuche, ein Boxplot von einigen numerischen Ergebnis nach Behandlungsbedingung und Besuchsnummer, mit der Anzahl der Beobachtungen in jeder Box unter der Handlung, und die Besuchszahlen genauso gut beschriftet. Hier sind einige gefälschte Daten, die zur Veranschaulichung dienen, und ich gebe zwei Beispiele von Dingen, die ich ausprobiert habe, die nicht ganz funktionierten.Annotieren x-Achse mit N in facettiertem Plot
library(ggplot2)
library(plyr)
trt <- factor(rep(LETTERS[1:2],150),ordered=TRUE)
vis <- factor(c(rep(1,150),rep(2,100),rep(3,50)),ordered=TRUE)
val <- rnorm(300)
data <- data.frame(trt,vis,val)
data.sum <- ddply(data, .(vis, trt), summarise,
N=length(na.omit(val)))
mytheme <- theme_bw() + theme(panel.margin = unit(0, "lines"), strip.background = element_blank())
Der folgende Code erzeugt ein Diagramm, das N Beschriftungen hat, wo ich sie haben möchte. Dazu werden zusammenfassende Daten aus einem von mir erstellten Hilfsdatensatz erfasst. Ich konnte jedoch nicht herausfinden, wie man den Besuch auf der X-Achse (idealerweise unter den einzelnen Schachtelbeschriftungen) beschriftet oder Besuche auf andere Weise visuell abgrenzt (z. B. Linien, die sie in Paneele trennen).
plot1 <- ggplot(data) +
geom_boxplot(aes(x=vis:trt,y=val,group=vis:trt,colour=trt), show.legend=FALSE) +
scale_x_discrete(labels=paste(data.sum$trt,data.sum$N,sep="\n")) +
labs(x="Visit") + mytheme
Die Handlung unten näher an, was ich will, als zuvor, dass es eine schöne Hierarchie von Behandlungen und Besucher hat, und ein ziemlich Format die Besuche abgrenzt. Für jedes Feld werden jedoch die Ns aus der ersten Zeile in den zusammenfassenden Daten, die der Behandlungsbedingung entsprechen, erfasst, da es nicht weiß, dass jede Facette die diesem Besuch entsprechende Zeile verwenden muss.
plot2 <- ggplot(data) + geom_boxplot(aes(x=trt,y=val,group=trt,colour=trt), show.legend=FALSE) +
facet_wrap(~ vis, drop=FALSE, switch="x", nrow=1) +
scale_x_discrete(labels=paste(data.sum$trt,data.sum$N,sep="\n")) +
labs(x="Visit") + mytheme
mir da die meisten der Weg Dieses erhielt. Leider scheint 'scales =" free_x "' mit 'drop = FALSE' zu kämpfen. In meinem größeren Kontext verwende ich grid.arrange, um ein Überplot zu erstellen, das auch ein zweites Diagramm für die Änderung von Visit 1 enthält, und ich möchte Plot 2 so arrangieren, dass Vis2-Vis1 visuell mit Vis2 in Plot ausgerichtet wird 1.Es funktioniert ohne meine Etiketten dank drop = FALSE, aber wenn ich skals = "free_x" hinzufügen, schlägt es mit der folgenden Fehlermeldung fehl: '" Fehler in if (zero_range (from) || zero_range (to)) {: fehlender Wert, wo TRUE/FALSE benötigt "' Ich habe noch nicht herausgefunden, ob es einen Workaround gibt. – ErinMcJ
@ErinMcJ Haben Sie ein Beispiel? Sie könnten eine neue Frage mit einem Beispiel Ihrer realen Situation stellen. Es könnte sein, dass die Annotation mit der Stichprobengröße in der Handlung oder die Vermeidung von Facettierung und die Verwendung von GridExtra-ähnlichen Lösungen am Ende für Sie besser funktionieren wird. – aosmith
Danke. Hier ist die komplexere Folgefrage. http://stackoverflow.com/questions/39027770/annotating-x-axis-with-n-in-faceted-plot-but-preserve-empty-facets – ErinMcJ