Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Group data and plot multiple lines

I'd like to plot multiple lines in R for this dataset: (x = Year, y = Value)

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

Each school has data for different years. I'd like to have one line for each school.

like image 967
dani Avatar asked Apr 27 '12 10:04

dani


People also ask

How do you plot multiple lines in a data frame?

You can plot multiple lines from the data provided by a Dataframe in python using matplotlib. You can do it by specifying different columns of the dataframe as the x and y-axis parameters in the matplotlib. pyplot. plot() function.

How do I plot multiple lines in Excel?

You can easily plot multiple lines on the same graph in Excel by simply highlighting several rows (or columns) and creating a line plot.

Can there be multiple line plots in one plot?

Plot Multiple Line Plots with Multiple Y-Axis We've again, created another Axes in the same position as the first one, so we can plot on the same place in the Figure but different Axes objects, which allows us to set values for each Y-axis individually.


3 Answers

Let's create some data:

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

Then to create a plot in base graphics, we create an initial plot of one group:

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

then iteratively add on the lines:

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

I've used type="b" to show the points and the lines.

Alternatively, using 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()
like image 69
csgillespie Avatar answered Oct 22 '22 12:10

csgillespie


Is this what you want? You need group = School_id to tell ggplot2 to plot separate lines for each school. If you want the horizontal axis to incluude all years between 1998 and 2005, then remove 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()
like image 16
Sandy Muspratt Avatar answered Oct 22 '22 12:10

Sandy Muspratt


The plot function in base R does not support grouping so you need to display your groups one by one. GGPLOT handles grouping well. I also suggest looking at Trellis XYPLOT which allows you to plot separate groups.

This is how you can create a basic grouped line plot using 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)
)
like image 4
Max C Avatar answered Oct 22 '22 11:10

Max C