2013-06-17 12 views
17

Próbujesz użyć ggplot do wykreślenia wielu linii na jednym wykresie, ale nie wiesz, jak to zrobić z moim zestawem danych. Nie jestem pewien, czy muszę zmienić datastructure czy nie (transpozycja?)Wykreśl wiele linii na jednym wykresie

danych wygląda następująco:

Company 2011 2013 
Company1 300 350 
Company2 320 430 
Company3 310 420 

Próbowałem też ona transponowana:

Year Company1 Company2 Company3 
2011 300  320  310 
2013 350  430  420 

I za to mogę wykreślić 1 z wartości przy użyciu;

ggplot(data=df, aes(x=Year, y=Company1)) + geom_line(colour="red") + geom_point(colour="red", size=4, shape=21, fill="white") 

Ale nie wiem, jak połączyć wszystkie firmy, ponieważ nie mam już obiektu "Firma" do grupowania. Jakieś sugestie?

Odpowiedz

44

należy przynieść swoje dane w formacie długim (tj stopionym), aby używać go z ggplot2:

library("reshape2") 
mdf <- melt(mdf, id.vars="Company", value.name="value", variable.name="Year") 

A potem trzeba użyć aes(... , group = Company) do grupy nich

ggplot(data=mdf, aes(x=Year, y=value, group = Company, colour = Company)) + 
    geom_line() + 
    geom_point(size=4, shape=21, fill="white") 

enter image description here

+0

'df' nie zastąpi' statystyk :: df', 'R' wie jaki masz na myśli przez kontekst. Spróbuj sam: 'df <- data.frame (A = 1: 10); df (df $ A, 1, 5) ' –

+1

@ SeñorO To jest to, co czytałem już wiele razy, ale masz rację, to nie jest nadpisane. Tak więc dla mnie: Nigdy nie przekazywaj nikomu informacji bez sprawdzenia ich osobiście :-) Zmieniłem moje pytanie. – Beasterfield

+0

Dobrym pomysłem może być uniknięcie 'df' jako nazwy zmiennej - jeśli używasz go często (tak jak ja, wbrew mojej własnej radzie), to czasami, gdy zapomnisz go zdefiniować, pojawia się tajemniczy błąd" Błąd w df $ foo: obiekt typu "zamknięcie" nie jest podzbioru "zamiast czegoś lepszego" Błąd: obiekt "df" nie został znaleziony ". –

10

Zamiast używać skandalicznie skomplikowanych struktur danych wymaganych przez ggplot2, możesz użyć natywnych funkcji R:

tab<-read.delim(text=" 
Company 2011 2013 
Company1 300 350 
Company2 320 430 
Company3 310 420 
",as.is=TRUE,sep=" ",row.names=1) 

tab<-t(tab) 

plot(tab[,1],type="b",ylim=c(min(tab),max(tab)),col="red",lty=1,ylab="Value",lwd=2,xlab="Year",xaxt="n") 
lines(tab[,2],type="b",col="black",lty=2,lwd=2) 
lines(tab[,3],type="b",col="blue",lty=3,lwd=2) 
grid() 
legend("topleft",legend=colnames(tab),lty=c(1,2,3),col=c("red","black","blue"),bg="white",lwd=2) 
axis(1,at=c(1:nrow(tab)),labels=rownames(tab)) 

R multiple lines plot

+2

"Skandalicznie zawiłe struktury danych" więcej niż trochę mocne. Bardzo pomocne jest wykorzystanie danych w tym kształcie – John

Powiązane problemy