2015-04-23 6 views
5

Potrzebuję wykreślić trzy wartości, aby utworzyć trzy kreski dla każdej wartości osi X. Moje dane to: My dataframe DFJak wykreślić wiele kolumn w R dla tej samej wartości osi X

W osi X musi być kolumna oznaczona jako "m", a dla każdej wartości "m" muszę wykreślić odpowiednie wartości "x", "y" i "z".

chcę użyć ggplot2 i muszę coś takiego:

Goal

+0

można zapewnić pewne odtwarzalne dane, aby pokazać, co chcesz osiągnąć? – cdeterman

+0

Dołącz [przykład odtwarzalny] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) z przykładowymi danymi wejściowymi i pokaż dowolny napisany przez siebie kod daleko. – MrFlick

+0

Niestety, nie został załadowany na początku, mam pewne problemy ze zdjęciami –

Odpowiedz

6

tworzę własny zestaw danych, aby pokazać, jak to zrobić:

danych:

x <- runif(12,1,1.5) 
y <- runif(12,1,1.5) 
z <- runif(12,1,1.5) 
m <- letters[1:12] 
df <- data.frame(x,y,z,m) 

Rozwiązanie:

#first of all you need to melt your data.frame 
library(reshape2) 
#when you melt essentially you create only one column with the value 
#and one column with the variable i.e. your x,y,z 
df <- melt(df, id.vars='m') 

#ggplot it. x axis will be m, y will be the value and fill will be 
#essentially your x,y,z 
library(ggplot2) 
ggplot(df, aes(x=m, y=value, fill=variable)) + geom_bar(stat='identity') 

wyjściowa:

enter image description here

Jeśli chcesz bary jeden obok drugiego trzeba określić położenie dodge na geom_bar tj:

ggplot(df, aes(x=m, y=value, fill=variable)) + 
     geom_bar(stat='identity', position='dodge') 

enter image description here

+0

Dziękuję bardzo, twoje rozwiązanie uratowało mnie. Czy wiesz, jak unikać alfabetycznego sortowania wartości osi X? –

+0

Serdecznie zapraszamy :) Cieszę się, że mogę pomóc. Istnieje bardzo dobra odpowiedź [tutaj] (http://stackoverflow.com/questions/3253641/how-to-change-the-order-of-a-discrete-x-scale-in-ggplot) na temat zmiany kolejności (druga odpowiedź, nie zaakceptowana). Musisz użyć 'scale_x_discrete' z argumentem' limits'. – LyzandeR