Sto provando a usare position_dodge su ggplot per ottenere grafici a scatole di due segnali diversi (ind) che condividono le stesse categorie (cat). Quando esiste una categoria con dati per un segnale ma non per l'altro, il grafico a scatole per il segnale con dati copre tutta la spaziatura orizzontale e non rispetta l'istruzione position_dodge per quella particolare categoria. C'è un modo per fare ggplot per far rispettare la regola di schivare? Come puoi vedere nell'esempio qui sotto, il segnale x non ha dati per la categoria B, quindi perde lo spazio riservato da position_dodge. Vorrei evitarlo.Come imporre il position_dodge di ggplot su categorie senza dati?
Grazie in anticipo.
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))
CORSO AGGIORNAMENTO
Dopo alcune soluzioni, mi si avvicinò con il risultato che cercavo ... (tipo di)
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)
Alcune persone consigliavano di utilizzare la sfaccettatura per l'effetto I w anted. La sfaccettatura non mi dà l'effetto che sto cercando. Il grafico finale che cercavo è il seguente:
Se si nota, il principale segno di spunta bianco in y = 10 è più spessa rispetto agli altri segni di graduazione. Questa linea più spessa è la geom_line con size = 1 che nasconde i boxplot indesiderati.
Vorrei poter combinare più oggetti geom in modo più uniforme. Ho segnalato questo come un bug sul github di Hadley, ma Hadley ha detto che questo è il modo in cui position_dodge si comporta in base alla progettazione. Immagino che sto usando ggplot2 in un modo non standard e soluzioni alternative sono il modo per andare su questo tipo di problemi. Comunque, spero che questo aiuti alcuni membri della R a spingere un po 'più in là la grande funzionalità di ggplot.
C'è qualche modo migliore per gestire questo 2.5 anni dopo? Ho la stessa situazione Ho provato a usare expand.grid() per creare un set di dati con NA per tutte le combinazioni di fattore di livello mancanti della variabile I am plotting, e sembrano essere semplicemente ignorati. – Michael
https://github.com/hadley/ggplot2/issues/688 Forse no :( – Michael
Io che c'era, ho avvolto il codice ggplot in una funzione e ho reso la linea bianca asse y un parametro di questa funzione Il motivo è che, se i dati incrociano y = 0, cadrà sotto la linea bianca, rendendo la soluzione troppo ovvia e fastidiosa. – JAponte