2015-07-22 14 views
15

Bardzo podoba mi się sposób, w jaki ggplot2::geom_dotplot() może ładnie układać kropki w kierunku środka kategorii, ale nie mogę połączyć tego z kolorem wypełnienia.Jak używać ggplot2's geom_dotplot() z wypełnieniem i grupą

Spójrzmy na przykład:

# test data 
tmpData <- data.frame(x=c(rep('x', 3),rep('y', 3)), y=c(1,1,2,1,2,2), fill=rep(c('A', 'B', 'B'), 2)) 

# Plot without fill color 
ggplot(tmpData, aes(x=x, y=y)) + 
    geom_dotplot(binaxis = "y", stackdir = "center", dotsize=4) 

skutkuje tym działki:

Dotplot without color

Ale kiedy dodać argument wypełnienia:

ggplot(tmpData, aes(x=x, y=y, fill=fill)) + 
    geom_dotplot(binaxis = "y", stackdir = "center", dotsize=4) 

wypełnienia wydaje się nadpisywać grupowanie wykonane na "x", powodując dwa punkty (x, 1) (x , 1) do zawalenia chciałbym, żeby miały różne kolory.

Dotplot with color

Kiedy próbuję określić grupę kolor wypełnienia jest ignorowany:

ggplot(tmpData, aes(x=x, y=y, group=x, fill=fill)) + 
    geom_dotplot(binaxis = "y", stackdir = "center", dotsize=4) 

Dotplot with group specified

Zawalenie wydaje się być możliwe do uniknięcia poprzez umożliwienie stackgroups:

ggplot(tmpData, aes(x=x, y=y, fill=fill)) + 
    geom_dotplot(binaxis = "y", stackgroups=TRUE, stackdir = "center", dotsize=4) 

dotpoot with stackgroups

Ale potem tracę centrowanie danych do "x" i "y", które znajdują się na pozostałych 3 działkach.

Czy istnieje sposób użycia geom_dotplot() dla obu grup i wypełnienia?

+2

Mogę potwierdzić, że ten problem wciąż pojawia się w 'ggplot2 1.0.1', i podniosłem problem z Hadley w tym kierunku: https://github.com/hadley/ggplot2/issues/1359 – maxheld

Odpowiedz

3

Jeśli jesteś otwarty na kawałku hacky roztworu po prostu, żeby go jak chcesz to patrzeć .. . można zastąpić polecenie wypełnienia po prostu dostarczanie go z wektorem nazw kolorów:

tmpData$colorname <- rep(c('red','blue','blue'),2) 

ggplot(tmpData, aes(x=x, y=y)) + 
    geom_dotplot(binaxis = "y", stackdir = "center", dotsize=4, fill=tmpData$colorname) 

enter image description here

+0

Bezwzględnie tego, czego szukałem - dzięki! –

2

Chyba trzeba dodać argument position = "dodge":

ggplot(tmpData, aes(x = x, y = y, fill = fill,)) + 
    geom_dotplot(binaxis = "y", stackdir = "center", dotsize = 4, position = "dodge") 

enter image description here

+2

Zrobiłem spróbuj, ale to rozwiązanie usuwa ładne centrowanie kropek wokół "x" i "y" (podobnie jak stackgroups = TRUE). –

+0

@Kristoffer Vitting-Seerup To nie jest dokładnie to samo co stackgroups = TRUE, są one symetrycznie narysowane, grupa A po lewej i B po prawej o pionowe osie x i y. Więc grupy są wyrównane, podczas gdy w twoim przykładzie nie są. – mpalanco

+0

To prawda, ale nie to chciałem zrobić. Chciałem, aby były wyśrodkowane dokładnie tak, jak na pierwszej działce, tylko z dodanym kolorem :-) –

Powiązane problemy