[R] multiple line plots

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Oct 6 12:04:41 CEST 2005


> # Not sure why this did not work
> #sapply(tw, setlen, len)

It probably did, but you discarded the result.  Try

tw <- sapply(tw, setlen, len)


On Thu, 6 Oct 2005, sosman wrote:

> Marc Schwartz wrote:
>  > On Wed, 2005-10-05 at 22:19 +1000, sosman wrote:
>  >
>  >>I have some data in a CSV file:
>  >>
>  >>time,pos,t,tl
>  >>15:23:44:350,M1_01,4511,1127
>  >>15:23:44:350,M1_02,4514,1128
>  >>15:23:44:350,M1_03,4503,1125
>  >>...
>  >>15:23:44:491,M2_01,4500,1125
>  >>15:23:44:491,M2_02,4496,1124
>  >>15:23:44:491,M2_03,4516,1129
>  >>...
>  >>15:23:44:710,M3_01,4504,1126
>  >>15:23:44:710,M3_02,4516,1129
>  >>15:23:44:710,M3_03,4498,1124
>  >>...
>  >>
>  >>Each pos (eg M1_01) is an independent time series.  I would like to plot
>  >>each time series as lines on a single plot and I wondered if there was
>  >>something more straight forward than I was attempting.
>  >>
>  >>I got as far as:
>  >>
>  >>fname = 't100.csv'
>  >>t = read.csv(fname)
>  >>tpos = split(t, t$pos)
>  >>plot(tpos[["M1_01"]]$t, type='l')
>  >>for (p in names(tpos)) {
>  >>     lines(tpos[[p]]$t)
>  >>}
>  >>
>  >>which seems to work but then I got stuck on how to make each line a
>  >>different colour and figured that there might a be a one liner R command
>  >>to do what I want.
>  >>
>  >>Any tips would be appreciated.
>  >
>  >
>  >
>  > See the examples in ?plot.ts for some approaches.
>  >
>  > You will need to review ?ts to create time series objects from your data
>  > to be used in plot.ts().
>  >
>  > Another approach, which is not specific to time series, is ?matplot.
>
> The matplot example looks like the go.
>
> The example data didn't really show the grouping and even though I
> mentioned time series, simply plotting the t values as an ordered
> sequence is fine for this application (sorry about the red herring).
>
> The dataset below is what I should have shown:
>
>      pos    t
> 1 M1_01 4511
> 2 M1_02 4514
> 3 M1_03 4503
> 4 M1_01 4500
> 5 M1_02 4496
> 6 M1_03 4516
> 7 M1_01 4504
> 8 M1_02 4516
> 9 M1_03 4498
>
> So what I ended up with was:
>
> # Make a wide data set
> tw = unstack(t, t ~ pos)
> # Results in a list since not all series the same length
> # Find the shortest dataset
> len = min(sapply(tw, length))
>
> setlen = function(l, newlen) { length(l) = newlen }
> # Not sure why this did not work
> #sapply(tw, setlen, len)
>
> for (n in names(tw)) {
>      length(tw[[n]]) = len
> }
> matplot(data.frame(tw), type='l')
>
> Apart from flying a bit blind, I obtained the plot I was after.
>
> thanks
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list