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?
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")
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))
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))