2016-08-03 10 views
4

In einem Anruf an geom_violin innerhalb ggplot2 können Sie angeben, dass die Fläche jeder Violine proportional zur Anzahl der Beobachtungen, die diese Violine bilden, durch Angabe scale="count".Für geom_violin, wie ist die Gesamtfläche aller Violinen angegeben?

Ich gehe davon aus, dass dies intern funktioniert, indem man eine Gesamtfläche (nennen wir diese Menge X) nimmt und sie proportional auf alle zu plottenden Violinen aufteilt. Das ist, was ich will, außer dass dies zu ziemlich schmalen Violinen führen kann, wenn die N Unterschiede zwischen den Gruppen beträchtlich genug sind, so dass einige Gruppen ein relativ niedriges N haben. In meinem Fall macht dies die Füllfarbe nur schwer zu sehen.

Ich denke, dass dies in meinem Fall zumindest weitgehend gelöst werden kann, indem X einfach ein wenig erweitert wird, so dass die wirklich kleinen Geigen gerade genug Platz bekommen, um noch lesbar zu sein. Mit anderen Worten, Ich möchte die Variation in der Fläche zwischen Geigen nach der Anzahl der Beobachtungen beibehalten, aber den "Pool" der Gesamtfläche vergrößern, die unter Violinen aufgeteilt wird, so dass jeder etwas größer wird.

Hat jemand eine Idee, wie man das erreichen könnte? Dafür muss es einen Schalter geben. Ich habe versucht Getue mit den Argumenten geom_violin wie width, size, violinwidth, und so, aber kein Glück so weit ...

EDIT: Code für ein langweiliges, aber reproduzierbare „Probe“ Daten eingestellt, dass ein Experimentieren mit .

y = runif(100, 1, 10) 
x = as.factor(rep(c(1,2), times=50)) 
z = as.factor(c(rep(1, 10), rep(2, 90))) 
df=data.frame(x, y, z) 
ggplot(df, aes(x=x, y=y, fill=z)) + geom_violin(scale="count") 
+1

Bitte geben Sie ein kleines reproduzierbares Beispiel an, um mögliche Lösungen zu testen. – Roland

+1

Hinzugefügt etwas langweilig aber hoffentlich vorbildlich genug, um nützlich zu sein. – Bajcz

+0

@Bajcz Haben Sie schon eine Lösung gefunden? –

Antwort

1

Sie können dies tun, indem width Parameter innerhalb geom_violin anpassen. Stellen Sie sicher, dass Sie auch position_dodge verwenden, um überlappende Plots zu vermeiden.

Verwendung Ihrer Daten

ggplot(df, aes(x=x, y=y, fill=z)) + geom_violin(scale="count", width=2) 

geben die folgende Handlung enter image description here

eine Lücke zwischen den Stellplätzen erlaubt durch position_dodge

ggplot(df, aes(x=x, y=y, fill=z)) + geom_violin(scale="count", width=2, position=position_dodge(width=0.5)) 

Verwendung Dies wird Ihnen die folgende nicht-überlappende Grundstück enter image description here

+0

Große Antwort, danke! Können Sie erklären, warum "Breite" eine berechnete Variable ist, die das Modell als Argument akzeptiert, wenn andere Variablen wie "count" und "violinewidth" ignoriert werden? Ich denke, deshalb habe ich angenommen, dass "Breite" nicht das Richtige ist, um manipuliert zu werden ... – Bajcz