2013-06-17 20 views
17

Der Versuch, mit ggplot mehrere Linien in einem Diagramm darzustellen, weiß aber nicht, wie ich das mit meinem Datensatz machen soll. Nicht sicher, ob ich brauche die Datenstruktur zu ändern oder nicht (transponieren?)Mehrere Linien in einem Diagramm plotten

Daten wie folgt aussehen:

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

ich es auch umgesetzt versucht:

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

Und dafür kann ich plotten 1 der Werte mit;

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

Aber ich weiß nicht, wie man alle Firmen kombiniert, da ich kein Objekt 'Firma' mehr habe, um zu gruppieren. Irgendwelche Vorschläge?

Antwort

44

Sie sollten Ihre Daten in lang (dh geschmolzen) Format bringen, es zu benutzen mit ggplot2:

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

Und dann haben Sie aes(... , group = Company) zu einer Gruppe verwenden, um sie:

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' überschreibt nicht' Statistiken :: df', 'R' weiß, welche Sie durch den Kontext sich beziehen. Probieren Sie es selbst aus: 'df <- data.frame (A = 1: 10); df (df $ A, 1, 5) ' –

+1

@ SeñorO Das ist, was ich schon mehrmals gelesen habe, aber du hast recht, es ist nicht überschrieben. Also als Anmerkung zu mir selbst: Übermitteln Sie niemals Informationen an andere, ohne sie selbst geprüft zu haben :-) Ich habe meine Frage bearbeitet. – Beasterfield

+0

Es kann immer noch eine gute Idee sein, 'df' als Variablennamen zu vermeiden - wenn Sie es oft verwenden (wie ich, gegen meinen eigenen Rat), dann manchmal, wenn Sie vergessen, es zu definieren, erhalten Sie den kryptischen Fehler" Fehler in df $ foo: Objekt vom Typ 'closure' ist nicht Teilmenge "anstelle von etwas besser wie" Fehler: Objekt 'df' nicht gefunden ". –

10

Anstatt die unverschämt gewundenen Datenstrukturen zu verwenden, die von ggplot2 benötigt werden, können Sie die nativen R-Funktionen verwenden:

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

"unverschämt verschlungenen Datenstrukturen" mehr als ein bisschen stark. Ich finde es sehr hilfreich, Daten in dieser Form zu verwenden – John

Verwandte Themen