Używanie geom_point
z position_jitterdodge
działa tylko po ustawieniu estetyki wypełnienia. Nie rozumiem, dlaczego tak powinno być!r/ggplot - Użyj position_jitterdodge bez estetyki wypełnienia
Polecenie
library(ggplot2)
ggplot(diamonds[ sample(nrow(diamonds), 1000), ],
aes(x = cut, y = carat, color = clarity)) +
geom_point(shape = 21, position = position_jitterdodge())
Produkuje błąd:
Error: position_jitterdodge requires the following missing aesthetics: fill
To działa, choć:
ggplot(diamonds[ sample(nrow(diamonds), 1000), ],
aes(x = cut, y = carat, fill = clarity)) +
geom_point(shape = 21, position = position_jitterdodge())
prostu dostarczanie wartości na to wypełnienie nie jest realną obejście:
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
Chociaż to działa jeśli podasz dowolny stały (odpuszczania ohydne wyniki):
ggplot(diamonds[ sample(nrow(diamonds), 1000), ],
aes(x = cut, y = carat, color = clarity, fill='constant')) +
geom_point(shape = 21, position = position_jitterdodge())
Wszelkie pomysły, w jaki sposób korzystać z jitter/dodge bez określania wypełnienia? (tj. tylko kolorowe punkty)
Edycja: w odpowiedzi na komentarz @ jorana, chciałbym nakładać punkty na działki. Ponieważ jeden nie musi używać fill
do rozróżniania działek, byłoby dobrze, gdyby geom_point(position=position_jitterdodge())
zajmował działki bez fill
. Może nie jest to obecnie możliwe, ale ...
#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())
to nie jest błąd. Początkiem tej cechy była specyficzna potrzeba umieszczenia punktów na unikniętych polach pudełek, które zostały uchylone przez "wypełnienie" (co jest wyraźnie wymienione w dokumentacji w '? Position_jitterdodge'). Zgadzam się, byłoby miło, gdyby działało bez pudełkowych działek, ale to tylko nieprzewidziany przypadek użycia, a nie błąd. – joran
W rzeczywistości, nakładanie się na boxplots jest dokładnie tym, co zamierzam zrobić, chociaż w moim przypadku na kartony zostały uchylone przez kolor. Pominąłem to z minimalnego przykładu powyżej bc, który nie był odpowiedni, ale dodam go z powrotem. – arvi1000
Mogę go uruchomić poprzez rozwidlenie ggplot2 i po prostu edytując 'position_jitterdodge', aby użyć' colour' zamiast wypełnienia. Ale nie jestem pewien, jak byś napisał tę funkcję (przynajmniej, jak to dobrze napisać), aby poradzić sobie w obu przypadkach. – joran