Utilizzare geom_point
con position_jitterdodge
funziona solo quando si imposta il riempimento estetico. Non riesco a capire perché dovrebbe essere così!r/ggplot - Usa position_jitterdodge senza un riempimento estetico
Questo comando
library(ggplot2)
ggplot(diamonds[ sample(nrow(diamonds), 1000), ],
aes(x = cut, y = carat, color = clarity)) +
geom_point(shape = 21, position = position_jitterdodge())
genera un errore:
Error: position_jitterdodge requires the following missing aesthetics: fill
questo funziona, però:
ggplot(diamonds[ sample(nrow(diamonds), 1000), ],
aes(x = cut, y = carat, fill = clarity)) +
geom_point(shape = 21, position = position_jitterdodge())
semplicemente fornendo un valore NA a riempimento non è una soluzione praticabile:
ggplot(diamonds[ sample(nrow(diamonds), 1000), ],
aes(x = cut, y = carat, color = clarity, fill=NA)) +
geom_point(shape = 21, position = position_jitterdodge())
> Error in seq.default(h[1], h[2], length = n) :
'to' cannot be NA, NaN or infinite
Anche se funziona se si specifica una costante arbitraria (perdonare i risultati orribili):
ggplot(diamonds[ sample(nrow(diamonds), 1000), ],
aes(x = cut, y = carat, color = clarity, fill='constant')) +
geom_point(shape = 21, position = position_jitterdodge())
Tutte le idee su come utilizzare il jitter/schivare senza specificare il riempimento? (vale a dire solo punti colorati)
Modifica: oltre al commento di @ joran, mi piacerebbe sovrapporre i punti sui grafici a scatole. Dal momento che non si intende necessariamente utilizzare fill
per differenziare i boxplot, sarebbe bello se i grafici inseriti fossero geom_point(position=position_jitterdodge())
senza fill
. Forse non al momento possibile, però ...
#This doesn't work:
ggplot(diamonds[ sample(nrow(diamonds), 1000), ],
aes(x = cut, y = carat, color = clarity)) +
geom_boxplot() +
geom_point(shape = 21, position = position_jitterdodge())
#This does, although obviously no one wants a plot like this
ggplot(diamonds[ sample(nrow(diamonds), 1000), ],
aes(x = cut, y = carat, color = clarity, fill='constant')) +
geom_boxplot() +
geom_point(shape = 21, position = position_jitterdodge())
#This is way it's intended to work, but marries you to 'fill'
ggplot(diamonds[ sample(nrow(diamonds), 1000), ],
aes(x = cut, y = carat, fill = clarity)) +
geom_boxplot() +
geom_point(shape = 21, position = position_jitterdodge())
E non è un bug. Le origini di questa _feature_ erano la necessità specifica di posizionare i punti sopra i diagrammi di caselle schivate che sono stati schivati tramite 'fill' (che è chiaramente indicato nella documentazione di'? Position_jitterdodge'). Sono d'accordo che sarebbe bello se funzionasse senza i grafici, ma questo è solo un caso d'uso inatteso, non un bug. – joran
In realtà, la sovrapposizione sui boxplot è esattamente ciò che sto cercando di fare, anche se nel mio caso i boxplot sono stati schivati dal colore. Ho omesso questo dall'esempio minimo sopra bc, non sembra rilevante, ma lo aggiungerò di nuovo. – arvi1000
Posso farlo funzionare foraggiando ggplot2 e semplicemente modificando 'position_jitterdodge' da usare per usare' colour' piuttosto che fill. Ma non sono sicuro di come scrivere questa funzione (almeno, come scrivere bene) per gestire entrambi i casi. – joran