Jak wymusić pozycję ggplot na pozycji_dodge w kategoriach bez danych?

Próbuję użyć pozycji_dodge na ggplot, aby uzyskać wykresy dwóch różnych sygnałów (ind) dzielących te same kategorie (cat). Gdy istnieje kategoria z danymi dla jednego sygnału, ale nie dla drugiego, pole wyboru sygnału z danymi obejmuje wszystkie odstępy poziome i nie respektuje instrukcji position_dodge dla tej konkretnej kategorii. Czy istnieje sposób, aby ggplot wymusił regułę uniku? Jak widać na poniższym przykładzie, sygnał x nie ma danych dla kategorii B, więc traci przestrzeń zarezerwowaną przez pozycję position_dodge. Chciałbym tego uniknąć.

Z góry dziękuję.

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))

POSTĘP AKTUALIZACJI

Po kilku obejściach wymyśliłem wynik, którego szukałem ... (rodzaj)

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)

Niektórzy ludzie przypominali sobie użycie facetingu dla efektu, który chciałem. Faceting nie daje mi efektu, którego szukam. Ostatni wykres, którego szukałem, pokazano poniżej:

Jeśli zauważysz, biały znacznik znacznika przy y = 10 jest grubszy niż inne znaczniki. Ta grubsza linia jest geom_line o rozmiarze = 1, który ukrywa niechciane wątki.

Chciałbym, żebyśmy mogli płynniej łączyć różne obiekty geom. Zgłosiłem to jako błąd w githubie Hadleya, ale Hadley powiedział, że tak właśnie zachowuje się pozycja_dodge. Myślę, że używam ggplot2 w niestandardowy sposób, a obejścia są sposobem na rozwiązanie tego typu problemów. Tak czy inaczej, mam nadzieję, że pomoże to niektórym osobom z grupy R w przesunięciu nieco większej funkcjonalności ggplot.

questionAnswers(3)

yourAnswerToTheQuestion