2013-02-10 1 views
9

Nadal jestem całkiem nowy dla R i mam do czynienia z problemem kreślenia, na który nie mogę znaleźć odpowiedzi.Jak wykreślić wiele zmiennych obok siebie w dotplot w R?

Mam ramki danych, który wygląda tak (choć dużo większe):

df <- data.frame(Treatment= rep(c("A", "B", "C"), each = 6), 
       LocA=sample(1:100, 18), 
       LocB=sample(1:100, 18), 
       LocC=sample(1:100, 18)) 

I chcę dot działek, które wyglądają jak this one produkowanej w programie Excel. Dokładnie takie formatowanie, jakiego potrzebuję: kropka do każdego z zabiegów obok siebie dla każdej lokalizacji, z danymi dla wielu lokalizacji na jednym wykresie. (Obfity przeprosiny za nie jest w stanie odpowiedzieć obraz tutaj; zamieszczanie zdjęć wymaga 10 reputację.)

enter image description here

To żaden problem, aby wykres dla każdej lokalizacji, z kropek kodowanych kolorami, a więc na:

ggplot(data = df, aes(x=Treatment, y=LocA, color = Treatment)) + geom_point() 

, ale nie mogę dowiedzieć się, jak dodać lokalizacje B i C do tego samego wykresu.

Każda rada byłaby mile widziana!

+0

przekształcić dane w postaci długiej następnie FACET fabuły. – mnel

Odpowiedz

10

Jak kilka osób wspomniało, trzeba „topić” dane, coraz to w „długiej” formie.

library(reshape2) 
df_melted <- melt(df, id.vars=c("Treatment")) 
colnames(df_melted)[2] <- "Location" 

W ggplot żargonie mające różne grupy, takie jak z boku po stronie obróbkę uzyskuje się przez „unikając”. Zwykle na takie rzeczy jak barplots można po prostu powiedzieć position="dodge" ale geom_point wydaje się wymagać nieco więcej ręczne specyfikacja:

ggplot(data=df_melted, aes(x=Location, y=value, color=Treatment)) + 
    geom_point(position=position_dodge(width=0.3)) 

enter image description here

+0

Nie ma potrzeby ręcznego unikania, wystarczy użyć 'position_dodge' w ramach połączenia do' geom_point'. np. 'DF <- stop (df, id.var = 'treatment'); ggplot (DF, aes (y = wartość, x = zmienna)) + geom_point (aes (color = Treatment), position = position_dodge (width = 1)) ' – mnel

+0

Cholera,' position = "dodge" 'nie działało więc założyłem, że unikanie nie zostało zaimplementowane dla punktów. Edytuję teraz odpowiedź. – Marius

+1

Dziękujemy! Właśnie tego szukam. Szczerze mówiąc, wolałbym użyć pudełka, ale mój szef jest przekonany, że punktowy wykres jest lepszy, ponieważ lubi widzieć kropki w klastrze i widzieć odstające (i tak, wiem, że wszystkie informacje są obecne w pudełku, i nie, Nie potrafię wyjaśnić, dlaczego oglądanie poszczególnych punktów jest "lepsze", chyba że wpadnę w naprawdę wymyślne rzeczy, takie jak próba nadania poszczególnym osobom [wiersza w pierwotnej ramce danych] określonego symbolu, w którym to przypadku można by spróbować sprawdzić, czy jest jeden który jest niezmiennie wysoki w różnych lokalizacjach). – phosphorelated

3

Należy zmienić kształt danych. Oto przykład z użyciem reshape2

library(reshape2) 
dat.m <- melt(dat, id.vars='Treatment') 
library(ggplot2) 
ggplot(data = dat.m, 
     aes(x=Treatment, y=value,shape = Treatment,color=Treatment)) + 
        geom_point()+facet_grid(~variable) 

enter image description here

Skoro chcesz dotplot proponuję również rozwiązanie kraty. Myślę, że w tym przypadku jest bardziej odpowiedni.

dotplot(value~Treatment|variable, 
     groups = Treatment, data=dat.m, 
     pch=c(25,19), 
     par.strip.text=list(cex=3), 
     cex=2) 

enter image description here