web-dev-qa-db-fra.com

Grouper les données et tracer plusieurs lignes

Je voudrais tracer plusieurs lignes dans R pour cet ensemble de données: (x = année, y = valeur)

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

Chaque école dispose de données pour différentes années. J'aimerais avoir une ligne pour chaque école.

20
dani

Créons quelques données:

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

Ensuite, pour créer un tracé dans les graphiques de base, nous créons un tracé initial d'un groupe:

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

puis ajoutez itérativement sur les lignes:

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

J'ai utilisé type="b" pour afficher les points et les lignes.

Alternativement, en utilisant 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()
28
csgillespie

C'est ce que tu veux? Vous avez besoin de group = School_id Pour dire à ggplot2 de tracer des lignes distinctes pour chaque école. Si vous souhaitez que l'axe horizontal inclue toutes les années entre 1998 et 2005, supprimez factor dans 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()
14
Sandy Muspratt

La fonction de tracé dans la base R ne prend pas en charge le regroupement, vous devez donc afficher vos groupes un par un. GGPLOT gère bien le regroupement. Je suggère également de regarder Trellis XYPLOT qui vous permet de tracer des groupes séparés.

Voici comment vous pouvez créer un tracé de ligne groupé de base à l'aide de Treillis:

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)
)
4
Max C