Wie erzwinge ich ggplots position_dodge für Kategorien ohne Daten?

Ich versuche, position_dodge auf ggplot zu verwenden, um Boxplots von zwei verschiedenen Signalen (ind) zu erhalten, die die gleichen Kategorien (cat) haben. Wenn es eine Kategorie mit Daten für ein Signal gibt, aber nicht für das andere, deckt der Boxplot für das Signal mit Daten den gesamten horizontalen Abstand ab und berücksichtigt nicht die Anweisung position_dodge für diese bestimmte Kategorie. Gibt es eine Möglichkeit, ggplot zu erstellen, um die Ausweichregel durchzusetzen? Wie Sie im folgenden Beispiel sehen können, hat das Signal x keine Daten für die Kategorie B, sodass es den von position_dodge reservierten Platz verliert. Das möchte ich vermeiden.

Danke im Voraus.

data<-data.frame(cat=c('A','A','A','A','B','B','A','A','A','A','B','B'), 
                 values=c(3,2,1,4,NA,NA,4,5,6,7,8,9), 
                 ind=c('x','x','x','x','x','x','y','y','y','y','y','y'))

print(ggplot() +
        scale_colour_hue(guide='none') +
      geom_boxplot(
           aes(x=as.factor(cat), y=values, 
               fill=ind), 
           position=position_dodge(width=.60), 
           data=data,
           outlier.size = 1.2,
           na.rm=T))

FORTSCHRITTSBERICHT

Nach einigen Umgehungen kam ich zu dem Ergebnis, das ich suchte ... (Art von)

data            <- data.frame(
cat=c('A','A','A','A','B','B','A','A','A','A','B','B','B'), 
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9, 0), 
ind=c('x','x','x','x','x','x','y','y','y','y','y','y','x'))

p  <- ggplot() +
      scale_colour_hue(guide='none') +
      geom_boxplot(aes(x=as.factor(cat), y=values, fill=ind),
      position=position_dodge(width=.60), 
      data=data,
      outlier.size = 1.2,
      na.rm=T) +
      geom_line(aes(x=x, y=y), 
                data=data.frame(x=c(0,3),y=rep(0,2)), 
                size = 1, 
                col='white')
print(p)

Einige Leute haben sich dazu entschlossen, Facettierung für den gewünschten Effekt zu verwenden. Beim Facettieren habe ich nicht den gewünschten Effekt. Das endgültige Diagramm, das ich gesucht habe, ist unten dargestellt:

Wenn Sie bemerken, ist der weiße Hauptteilstrich bei y = 10 dicker als die anderen Teilstriche. Diese dickere Linie ist die geom_line mit der Größe 1, die unerwünschte Boxplots verbirgt.

Ich wünschte, wir könnten verschiedene Geom-Objekte nahtloser kombinieren. Ich habe dies als Fehler in Hadleys Github gemeldet, aber Hadley sagte, dass sich position_dodge so von vornherein verhält. Ich denke, ich verwende ggplot2 auf eine nicht standardmäßige Art und Weise und Workarounds sind der Weg, um diese Art von Problemen zu lösen. Wie auch immer, ich hoffe, dies hilft einigen der R-Leute, die großartige Funktionalität von ggplot ein wenig weiter voranzutreiben.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage