2012-04-27 12 views
18

mi piacerebbe per tracciare più linee in R per questo insieme di dati: (x = anno, y = Valore)dati di Gruppo e tracciare le linee multiple

School_ID Year Value 
A   1998 5 
B   1998 10 
C   1999 15 
A   2000 7 
B   2005 15 

Ogni scuola ha i dati per diversi anni. Mi piacerebbe avere una linea per ogni scuola.

risposta

25

Creiamo alcuni dati:

dd = data.frame(School_ID = c("A", "B", "C", "A", "B"), 
    Year = c(1998, 1998, 1999, 2000, 2005), 
    Value = c(5, 10, 15, 7, 15)) 

Poi per creare una trama grafica di base, creiamo una trama iniziale di un gruppo:

plot(dd$Year[dd$School_ID=="A"], dd$Value[dd$School_ID=="A"], type="b", 
    xlim=range(dd$Year), ylim=range(dd$Value)) 

poi iterativamente aggiungere sulle linee:

lines(dd$Year[dd$School_ID=="B"], dd$Value[dd$School_ID=="B"], col=2, type="b") 
lines(dd$Year[dd$School_ID=="C"], dd$Value[dd$School_ID=="C"], col=3, type="b") 

Ho usato type="b" per mostrare i punti e le linee.

alternativa, utilizzando ggplot2:

require(ggplot2) 
##The values Year, Value, School_ID are 
##inherited by the geoms 
ggplot(dd, aes(Year, Value,colour=School_ID)) + 
    geom_line() + 
    geom_point() 
+0

Grazie, ma quando uso la funzione ggplot solo trame 1 scuola. Come posso tracciare una linea per ogni school_id? – dani

+0

Potrebbe essere necessario fornirci il set di dati completo –

12

E 'questo quello che vuoi? Hai bisogno di group = School_id per dire a ggplot2 di tracciare linee separate per ogni scuola. Se si desidera che l'asse orizzontale per incluude tutti gli anni tra il 1998 e il 2005, quindi rimuovere factor in x = factor(year)

library(ggplot2) 

df = read.table(text = "School_id Year Value 
A   1998 5 
B   1998 10 
C   1999 15 
A   2000 7 
B   2005 15", sep = "", header = TRUE) 

ggplot(data = df, aes(x = factor(Year), y = Value, color = School_id)) +  
    geom_line(aes(group = School_id)) + geom_point() 
+0

Mi sembra di ottenere solo una scuola? – dani

+0

Ricevo due linee scolastiche - per le scuole A e B. Non c'è una linea per la scuola C perché c'è solo un punto dati per la scuola C. –

+0

Ho anche due linee scolastiche che usano il codice csgillespie. –

2

La funzione di base di trama in R non supporta il raggruppamento, quindi è necessario per visualizzare i gruppi uno per uno. GGPLOT gestisce bene il raggruppamento. Suggerisco anche di guardare Trellis XYPLOT che ti permette di tracciare gruppi separati.

Questo è come è possibile creare una trama linea di base utilizzando raggruppati Trellis:

library(lattice) 
rm(list = ls())  # clear objects 
graphics.off()  # close graphics windows 

test = data.frame(x = rep(1:3, each = 2), 
        group = rep(c("Group 1","Group 2"),3), 
        y= c(22,8,11,4,7,5) 
       ) 
xyplot(y~x, 
     type="b", 
     group=group, 
     data=test, 
     auto.key =list(
     points = FALSE, 
     columns=2, 
     lines = TRUE) 
) 
+2

Modifica la risposta precedente invece di creare una seconda risposta. –

Problemi correlati