Ho provato diversi suggerimenti basati su diversi post qui, oltre a leggere la documentazione di ggplot2, ma questa domanda è leggermente diversa e non ho trovato una soluzione ancora.Combinazione di geom_point e geom_line con position_jitterdodge in ggplot2 per due fattori di raggruppamento
Ecco un frammento di codice per fare un dataframe fuso simile a quello con cui sto lavorando:
a <- c(1,2,3,4,5,6,1,2,3,4,5,6)
b <- c("loss", "draw", "win", "draw", "loss", "win", "loss", "draw", "win", "draw", "loss", "win")
c <- c(2,3,5,4,4,5,4,4,3,5,2,4)
d <- c(rep("x", 6), rep("y", 6))
temp <- data.frame(a,b,c,d)
Quello che voglio è quello di creare un diagramma a punti con B sul l'asse x, C ON l'asse y, con i punti sull'asse x raggruppati per d e le linee tra loro raggruppati per a. Se partiamo da solo mettendo i punti sul grafico in questo modo, si tratta bene fuori:
ggplot(temp, aes(x=b, y=c, fill=d, colour=d))+
geom_point(position=position_jitterdodge())
This is the dot plot I get, which is how I want it to look. I punti sono color-coded in base al fattore D, e per di più stanno jitterdodged su un lato in modo che x è a sinistra e y è a destra.
Ora, tutto ciò che voglio è connettere i punti con le linee in base al fattore a. This is a mocked-up version I made in MS Paint di come dovrebbe apparire. L'aggiunta di un geom_line e l'impostazione del gruppo geom_line ad una dovrebbe funzionare ...
ggplot(temp, aes(x=b, y=c, fill=d, colour=d))+
geom_point(position=position_jitterdodge())+
geom_line(aes(group=a),position=position_jitterdodge())
... ma non venire fuori a destra. Le linee che crea sono della lunghezza giusta per collegare i punti corretti, ma a malapena riescono a toccarli, sembra che siano sul grafico a caso. Vorrei aggiungere un altro screenshot, ma non ho ancora i privilegi.
Inoltre, se cambio il gruppo estetica di essere in l'estetica complessiva in questo modo:
ggplot(temp, aes(x=b, y=c, fill=d, colour=d, aes(group=a)))+
geom_point(position=position_jitterdodge())+
geom_line(position=position_jitterdodge())
... allora i punti vengono commutate in giro in modo che siano nella posizione sbagliata. E in ogni caso, le linee continuano a non unirsi pienamente ai punti.
Ho anche provato a specificare i valori di larghezza e jitter.width nella parte position_jitterdodge(), e le linee e i punti ancora non si uniscono correttamente. Ho anche letto la documentazione di ggplot2, diverse precedenti domande StackOverflow e ho provato molte combinazioni di position_jitter, position_dodge, geom_jitter, ecc., Ma finora non ho avuto fortuna.
Qualsiasi aiuto sarebbe molto apprezzato.
Grazie, questo funziona perfettamente. Non è l'ideale per farlo ogni volta, ma è decisamente meglio che avere i punti e le linee dappertutto. – GFL
Puoi racchiuderlo in una funzione, semplice 'jitterVal <- runif (nrow (temp), max = 0.25)' più interruzioni e lables per 'scale_x_continuous' dovrebbero essere sufficienti per farlo funzionare automaticamente. –