2013-06-17 3 views
17

Provare a utilizzare ggplot per tracciare più linee in un grafico, ma non sono sicuro di come farlo con il mio set di dati. Non è sicuro se ho bisogno di cambiare il datastructure o meno (trasporre?)Tracciare più linee in un grafico

dati assomiglia a questo:

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

Ho anche provato trasposto:

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

E per questo posso tracciare 1 dei valori che usano;

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

Ma non so come combinare tutte le società in quanto non ho più un oggetto "Azienda" da raggruppare. Eventuali suggerimenti?

risposta

44

Si consiglia di portare i dati in formato esteso (cioè fuso) da utilizzare con ggplot2:

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

E poi si deve usare aes(... , group = Company) di raggrupparli:

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' non sovrascriverà' statistiche :: df', 'R' sa quale ti riferisci dal contesto. Provalo tu stesso: 'df <- data.frame (A = 1: 10); df (df $ A, 1, 5) ' –

+1

@ SeñorO Questo è quello che ho letto già più volte ma hai ragione, non viene sovrascritto. Quindi, per quanto mi riguarda: non passare mai le informazioni a qualcun altro senza averle controllate da solo :-) Ho modificato la mia domanda. – Beasterfield

+0

Può essere comunque una buona idea evitare 'df' come nome di variabile - se lo si usa spesso (come faccio io, contro il mio stesso consiglio) allora a volte quando si dimentica di definirlo, si ottiene l'errore criptico" Errore in df $ pippo: l'oggetto di tipo 'chiusura' non è subsabile 'invece di qualcosa di meglio come "Errore: oggetto' df 'non trovato". –

10

Invece di utilizzare le strutture di dati scandalosamente complicate richieste da ggplot2, è possibile utilizzare le funzioni R native:

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

"strutture dati scandalosamente contorte" più che un po 'forti. Trovo molto utile utilizzare i dati in questa forma – John