I've already shown how to plot multiple data series in R with a traditional plot by using the par(new=T), par(new=F) trick. Today I'll discuss plotting multiple time series on the same plot using ggplot().
First let's generate two data series y1 and y2 and plot them with the traditional points methods
x <- seq(0, 4 * pi, 0.1) n <- length(x) y1 <- 0.5 * runif(n) + sin(x) y2 <- 0.5 * runif(n) + cos(x) - sin(x) plot(x, y1, col = "blue", pch = 20) points(x, y2, col = "red", pch = 20) |
This is exactly the R code that produced the above plot. It is just a simple plot and points functions to plot multiple data series. It is not really the greatest, smart looking R code you want to use. Better plots can be done in R with ggplot.
Plotting with Ggplot2
Now, let's try this with ggplot2.
First we need to create a data.frame with our series.
If we have very few series we can just plot adding geom_point as needed.
library(ggplot2) df <- data.frame(x, y1, y2) ggplot(df, aes(x, y = value, color = variable)) + geom_point(aes(y = y1, col = "y1")) + geom_point(aes(y = y2, col = "y2")) |
But if we have many series to plot an alternative is using melt to reshape the data.frame and with this plot an arbitrary number of rows. For example:
library(reshape) # This creates a new data frame with columns x, variable and value # x is the id, variable holds each of our timeseries designation df.melted <- melt(df, id = "x") ggplot(data = df.melted, aes(x = x, y = value, color = variable)) + geom_point() |
And thats how to plot multiple data series using ggplot. The basic trick is that you need to melt your data into a new data.frame. Remember, in data.frames each row represents an observation.
update:
Another option, pointed to me in the comments by Cosmin Saveanu (Thanks!), it to plot the multiple data series with facets (good for B&W):
library(reshape) ggplot(data = df.melted, aes(x = x, y = value)) + geom_point() + facet_grid(variable ~ .) |