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. Now I'll show how to do it within ggplot2.

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