2016-07-14 31 views
1

Meine Frage ist einfach, denke ich, aber Googeln und Fusseln haben mich nirgendwohin gebracht. Hoffentlich kann hier jemand helfen. Ich habe Daten, die über drei Jahre von zwei verschiedenen Behandlungsgruppen gesammelt wurden. Ich möchte einen Boxplot für jede Kombination aus Behandlung und Jahr erstellen (um zu sehen, ob der Behandlungseffekt von Jahr zu Jahr variiert). Allerdings kann ich nicht herausfinden, wie die x-Achse die Art und Weise zu beschriften I ggplot2.Mit ggplot2, wie kann ich die x-Achse mit nur einem der beiden Faktoren beschriften, die zum Erstellen eines gruppierten Boxplots verwendet werden?

Hier einige Code zu verwenden möchten, die einige gefälschte Daten Art ähnlich wie meine eigenen schafft.

fakeX = factor(rep(c(0,1), times=60)) 
fakeY = factor(rep(c(1,2,3), each=40)) 
fakeZ = round(runif(120, 0, 12), digits=1) 
df1 = data.frame(fakeX, fakeY, fakeZ) 
df1$inter = interaction(df1$fakeX, df1$fakeY) 

ggplot(df1, aes(x=inter, y = fakeZ)) + 
stat_boxplot(geom='errorbar', lwd=1.75) + 
geom_boxplot(outlier.size=5, lwd = 1.75, fatten=1.25, 
fill = rep(c("dim gray", "ivory3"), times=3), aes(fill=fakeY)) + 
scale_x_discrete(labels = c("2013", "", "2014", "", "2015", "")) 

Dieser Code erzeugt einen Satz von Boxplots wie die ich suche:

enter image description here

So weit so gut. Wie Sie jedoch sehen können, habe ich Behandlungen, die bereits mit Farbe gekennzeichnet sind (die Bildunterschrift erklärt, welches das ist), , also brauche ich nur meine Achsenetiketten, um zu sagen, welches Jahr jedes Set von zwei Boxplots von ist. Allerdings kann ich nicht herausfinden, der Code, der das Jahr Etiketten zentriert werden genau zwischen den beiden Boxplots jeder ist für, was ist, was ich denke, wäre die klarste Sache zu tun. Gerade jetzt, das Beste, was ich tun konnte, ist das Jahr-Label mit dem ersten Boxplot von jedem Jahr. Ich habe versucht, das breaks Argument innerhalb von scale_x_discrete, vergeblich zu verwenden. Ich habe auch versucht, einen position=position_nudge() Aufruf an scale_x_discrete zu übergeben, aber das hat auch nicht funktioniert. Wenn ich Leerzeichen vor meinen Achsenbeschriftungen hinzufüge, kann ich das nachahmen, was ich suche, aber ich müsste Versuch und Irrtum verwenden, um die Anzahl der benötigten Leerzeichen genau für jedes Diagramm zu erhalten, und es scheint dort zu sein muss ein besserer Weg sein. Irgendwelche Gedanken?

+1

Ich glaube, du bist für einen Ansatz eher wie 'ggplot (DF1, aes (x = fakey, y = fakeZ)) suchen + geom_boxplot (aes (fill = fakeX), position = "ausweichen") '. – joran

Antwort

1

Ein konkreteres Beispiel als mein Kommentar oben:

ggplot(df1,aes(x = fakeY,y = fakeZ,fill = fakeX)) + 
    stat_boxplot(geom = "errorbar",position = "dodge",lwd = 1.75) + 
    geom_boxplot(position = "dodge",lwd = 1.75,fatten = 1.25,show.legend = FALSE) + 
    scale_fill_manual(values = c("dim gray", "ivory3")) + 
    scale_x_discrete(labels = c('2013','2014','2015')) 
+0

Super, sieht gut aus. Ich habe eine Modifikation vorgenommen: Ich habe 'position =" dodge "' in 'stat_boxplot' und' geom_boxplot' in 'position = position_dodge (1)' geändert, so dass die Boxplots innerhalb jedes Jahres ein wenig voneinander entfernt waren. – Bajcz