Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to plot overlaying time series in R?

Tags:

I would like to compare the values of two different variables in time.

For example, having two datasets:

dataset1(Date, value) and dataset2(Date, value)

In order to plot just first, we can execute the following:

x.Date <- as.Date(dataset1$Date)     x <- zoo(dataset1$Value, x.Date)     plot(x) 

To the same window I would like to add (dataset2$value, dataset2$Date), and by chance set the different color.

the values dataset1$Date and dataset2$Date are not neccessary the same (some days might overlap and some not), for example dataset1$Date might contain (dec01, dec02, dec03, dec05) and dataset2$Date (dec02, dec03, dec06).

Does anyone know how to plot two (or several) time plots in the same window?

like image 741
Niko Gamulin Avatar asked Sep 13 '12 08:09

Niko Gamulin


People also ask

How do you plot two time series on the same plot in R?

Method 1: Using Basic R methods First, we create a data vector that has data for all the time series that have to be drawn. Then we plot the time series using the first dataset and plot() function. Then add other time series using line() function to the existing plot.


2 Answers

There are several options. Here are three options working with zoo objects.

set.seed(1) xz = zoo(ts(rnorm(20), frequency = 4, start = c(1959, 2))) yz = zoo(ts(rnorm(20), frequency = 4, start = c(1959, 2))) # Basic approach plot(xz) lines(yz, col = "red") # Panels plot.zoo(cbind(xz, yz)) # Overplotted plot.zoo(cbind(xz, yz),           plot.type = "single",           col = c("red", "blue")) 

If you are plotting regular ts objects, you can also explore ts.plot:

set.seed(1) x = ts(rnorm(20), frequency = 4, start = c(1959, 2)) y = ts(rnorm(20), frequency = 4, start = c(1959, 2)) ts.plot(x, y, gpars = list(col = c("black", "red"))) 
like image 68
A5C1D2H2I1M1N2O1R2T1 Avatar answered Sep 19 '22 15:09

A5C1D2H2I1M1N2O1R2T1


I had the same task in hand and after some research I came across ts.plot {stats} function in r which was very helpful.

The usage of the function is as follows :

    ts.plot(..., gpars = list()) 

gpars is the graphic parameters where you can specify the graphic components of the plot.

I had a data similar to this and stored in a variable called time:

           [,1] [,2]  [,3]  [,4] [,5]  [,6]  [,7]  [,8]   [,9] [,10]     V3     1951 1100   433  5638 1760  2385  2602 11007   2490   421     V5      433  880   216  4988  220  8241 13229 18704   6289   421     V7     4001  440   433  3686  880  9976 12795 21036  13229  1263     V9     2385 1320   650  8241  440 12795 13229 19518  11711  1474     V11    4771  880  1084  6723    0 17783 17566 27326  11060   210     V13    6940  880  2168  2602 1320 21036 16265 10843  15831  1474     V15    3903 1760  1951  3470    0 18217 14964     0  13663  2465     V17    4771  440  2819  8458  880 25591 24940  1518  17783  1895     V19    7807 1760  5205  2385    0 14096 22771 13880  12578  1263     V21    5205  880  5205  6506  880 28410 18217 13229  19952  1474     V23    6506 1760  5638  7590  880 14747 26675 11928  12795  1474     V25    7373  440  5855 10626    0 19301 21470 15398  19952  1895     V27    5638 2640  6289     0  880 16482 20603 30796  14313  2316     V29    8241  440  6506  6723  880 11277 35784 25157  23205  4423     V31    7373 2640  6072  8891  220 17133 27109 31013  27287  4001     V33    6723  660  5855 14313  660  6940 26892 17566  24111  4844     V35    9325 2420  9325 12578    0  6506 30796 34483  23422  5476     V37    4771  440  6872 12361  880  9325 36218 25808  30362  4844     V39    9976 2640  7658 12361  440 11277 36001 31013  40555  4633     V41   10410  880  6506 12795  440 26241 33398 27976  24940  5686     V43    5638 2200  7590 14313    0  9976 34483 29928  33832  6108     V45   10843  440  8675 11711  440  7807 29278 24940  43375  4633     V47    8675 1760  8891 13663    0  9108 38386 31230  33398  4633     V49   10410 1760  9542 13880  440  8675 39051 31446  42507  5476         .   .   .   .   .   .   .   .   . 

And I had to get a Time series plot for each column on the same plot. The code is as follows:

    ts.plot(time,gpars= list(col=rainbow(10))) 

The result of the graph looks like this. Multiple time series in a single plot

like image 29
kirancodify Avatar answered Sep 18 '22 15:09

kirancodify