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