web-dev-qa-db-de.com

Zeichnen Sie mehrere Linien in einem Diagramm

Versuch, ggplot zu verwenden, um mehrere Linien in ein Diagramm zu zeichnen, aber nicht sicher, wie dies mit meinem Datensatz geschieht. Nicht sicher, ob ich die Datenstruktur ändern muss oder nicht (transponieren?)

Daten sehen so aus:

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

Ich habe es auch ausprobiert:

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

Und dazu kann ich 1 der Werte mit darstellen;

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 ich alle Unternehmen zusammenfassen soll, da ich nicht mehr das Objekt "Unternehmen" zum Gruppieren habe. Irgendwelche Vorschläge?

17
Chrisvdberge

Sie sollten Ihre Daten in ein langes (d. H. Geschmolzenes) Format bringen, um sie mit ggplot2 zu verwenden:

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

Und dann müssen Sie aes( ... , group = Company ) verwenden, um sie zu gruppieren:

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

49
Beasterfield

Anstelle der von ggplot2 geforderten verworrenen Datenstrukturen können Sie die systemeigenen 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

11
Federico Giorgi

Die Antwort von @Federico Giorgi war eine sehr gute Antwort. Es hat mir geholfen. Daher habe ich Folgendes ausgeführt, um aus den Daten eines einzigen Datensatzes mehrere Zeilen in derselben Zeichnung zu erzeugen, habe ich eine for-Schleife verwendet. Legende kann auch hinzugefügt werden. 

plot(tab[,1],type="b",col="red",lty=1,lwd=2, ylim=c( min( tab, na.rm=T ),max( tab, na.rm=T ) )  )
for( i in 1:length( tab )) { [enter image description here][1]
lines(tab[,i],type="b",col=i,lty=1,lwd=2)
  } 
axis(1,at=c(1:nrow(tab)),labels=rownames(tab))
0
Estatistics