web-dev-qa-db-fra.com

Tracer plusieurs lignes dans un graphique

Essayer d'utiliser ggplot pour tracer plusieurs lignes dans un graphique, mais vous ne savez pas comment faire avec mon jeu de données. Pas sûr de devoir changer de structure de données ou non (transposer?)

Les données ressemblent à ceci:

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

J'ai aussi essayé de le transposer:

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

Et pour cela, je peux tracer 1 des valeurs en utilisant;

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

Mais je ne sais pas comment combiner toutes les entreprises car je n'ai plus d'objet «Entreprise» sur lequel me regrouper. Aucune suggestion?

17
Chrisvdberge

Vous devez amener vos données dans un format long (c'est-à-dire fondu) pour pouvoir les utiliser avec ggplot2:

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

Et puis vous devez utiliser aes( ... , group = Company ) pour les regrouper:

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

Au lieu d'utiliser les structures de données à la fois scandaleusement compliquées requises par ggplot2, vous pouvez utiliser les fonctions R natives:

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

La réponse de Federico Giorgi était une très bonne réponse. Cela m'a aidé. Par conséquent, j’ai fait ce qui suit afin de produire plusieurs lignes dans le même tracé à partir des données d’un seul jeu de données, j’ai utilisé une boucle for. La légende peut aussi être ajoutée. 

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