2012-04-27 13 views
18

ich mehrere Zeilen in R zu diesem Datensatz plotten möchten: (x = Jahr, y = Wert)Gruppendaten und plotten mehrere Zeilen

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

Jede Schule hat für verschiedene Jahre Daten. Ich hätte gerne eine Zeile für jede Schule.

Antwort

25

Lassen Sie uns einige Daten erstellen:

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

Dann ein Grundstück in Basis Grafiken zu erstellen, erstellen wir eine erste Handlung einer Gruppe:

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

fügen Sie dann iterativ auf den Linien:

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

Ich habe type="b" verwendet, um die Punkte und die Linien zu zeigen.

Alternativ, mit 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

Danke, aber wenn ich die ggplot Funktion es Schule nur 1 Parzellen. Wie kann ich für jede school_id eine Zeile zeichnen? – dani

+0

Sie müssen uns vielleicht den vollständigen Datensatz geben –

12

Ist das, was Sie wollen? Sie müssen group = School_id eingeben, damit ggplot2 separate Zeilen für jede Schule erstellt. Wenn Sie die horizontale Achse wollen alle Jahre zwischen 1998 und 2005 incluude, entfernen Sie dann 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

Ich scheine nur eine Schule geplottet zu bekommen? – dani

+0

Ich bekomme zwei Schullinien - für Schulen A und B. Es gibt keine Linie für Schule C, weil es nur einen Datenpunkt für Schule C. gibt. –

+0

Ich bekomme auch zwei Schullinien mit csgillespie code. –

2

Die Plot-Funktion in der Basis R unterstützt keine Gruppierung so müssen Sie Ihre Gruppen nacheinander angezeigt werden soll. GGPLOT behandelt die Gruppierung gut. Ich schlage auch vor, Trellis XYPLOT zu betrachten, mit dem Sie separate Gruppen zeichnen können.

Dies ist, wie Sie einen grundlegenden gruppierte Liniendiagramm erstellen können Trellis mit:

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

Bitte bearbeiten Sie Ihre vorherige Antwort, anstatt eine zweite Antwort zu erstellen. –

Verwandte Themen