2016-04-26 12 views
1

Ich versuche ein gruppiertes Violinplot zu erstellen (siehe Abbildung), wo ich 3 Levels für vier kategorische Variablen auftrage. Die Handlung kommt gut in Anbetracht der Daten außer der Tatsache, dass die Boxen die gleiche Farbe wie die breiteren Geige Plots hinter haben sie schwierig zu sehen. Idealerweise möchte ich, dass alle Kästchen durchgehend weiß bleiben. Ich verstehe, dass der Grund, warum die Boxen die Farbe ändern, die Antwort auf die fill ist, die ich gewählt habe. Ich frage mich, ob es eine Möglichkeit gibt, die Füllung für die geom_violin von der geom_boxplot zu trennen. HierErstelle ein Violinplot, wo die Geige und der Boxplot verschiedene Farben haben. Ggplot2

ist die abgespeckte Code verwende ich

p <- ggplot(df, aes(x=metric, y=value, fill=variable))+ 
geom_violin(width=0.9, position=position_dodge(0.75), bw=1.5)+ 
geom_boxplot(width=0.3, outlier.shape = NA, position=position_dodge(0.75))+ 
scale_fill_manual(values=c("gray50", "gray75", "gray100"), 
       breaks=c("res.error.random", "res.error.increase", "res.error.decrease"), 
       labels=c("random cost", "overestimated", "underestimated")) 

Example of the plot I am creating

+0

löschen 'füllen = variable' in dem' ggplot (aes()) 'und steckt es in dem' geom_boxplot (aes()) ' . In diesem Fall wird nur das Boxplot vom 'fill'-Argument betroffen sein – bVa

Antwort

1

Alles hängt, wo Sie schreiben fill:

  • innen ggplot(aes()): alle neuen Schichten betroffen sein wird.
  • innerhalb geom_boxplot(aes()): nur diese Schicht betroffen ist.

Es ist wichtig, es in aes zu schreiben, vor allem, wenn Sie später eine scale_fill_manual() verwenden möchten. Hier

ist eine vollständige Antwort mit generierten Daten:

df <- data.frame(var1 = sample(c("A", "B", "C"), 50, replace =T), 
      var2 = sample(c("group1", "group2", "group3"), 50, replace =T), 
      value = sample(c(1,2,3,4,5,6,7,8,9,10), 50, replace =T)) 

1.Same Farbe für boxplot und violin [ggplot(aes(fill =))]:

ggplot(df, aes(x=var1, y=value, fill = var2, group = interaction(var1,var2))) + 
geom_violin(width=0.9, position=position_dodge(0.75), bw=1.5) + 
geom_boxplot(width=0.3, outlier.shape = NA, position=position_dodge(0.75)) 

enter image description here


2.Different Farben [geom_violin(aes(fill =))]:

ggplot(df, aes(x=var1, y=value, group = interaction(var1,var2)))+ 
geom_violin(width=0.9, position=position_dodge(0.75), bw=1.5, aes(fill = var2))+ 
geom_boxplot(width=0.3, outlier.shape = NA, position=position_dodge(0.75), fill = "white") 

enter image description here

Verwandte Themen