2012-04-27 15 views
18

que me gustaría trazar varias líneas en R para este conjunto de datos: (x = Año, y = Valor)Grupo de los datos y la trama múltiples líneas

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

cada escuela tiene datos para diferentes años. Me gustaría tener una línea para cada escuela.

Respuesta

25

Vamos a crear algunos datos:

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

continuación para crear una trama en gráficos de base, creamos una trama inicial de un grupo:

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

entonces iterativamente añadir en las líneas:

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

He usado type="b" para mostrar los puntos y las líneas.

Alternativamente, utilizando 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

Gracias, pero cuando se utiliza la función ggplot sólo parcelas 1 escuela. ¿Cómo puedo dibujar una línea para cada school_id? – dani

+0

Es posible que tenga que darnos el conjunto de datos completo –

12

¿Es esto lo que quieres? Necesita group = School_id para decirle a ggplot2 que trace líneas separadas para cada escuela. Si desea que el eje horizontal para incluude todos los años entre 1998 y 2005, luego retire factor en 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

¿Parece que solo consigues una escuela trazada? – dani

+0

Obtengo dos líneas escolares - para las escuelas A y B. No hay línea para la escuela C porque solo hay un punto de datos para la escuela C. –

+0

También recibo dos líneas escolares usando el código csgillespie. –

2

La función trama en la base de R no soporta la agrupación por lo que necesita para mostrar sus grupos, uno por uno. GGPLOT maneja la agrupación bien. También sugiero que veas Trellis XYPLOT, que te permite trazar grupos separados.

Esto es cómo se puede crear un diagrama de puntos agrupados básica usando Conducción:

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

Por favor edite su respuesta anterior en lugar de crear una segunda respuesta. –

Cuestiones relacionadas