· r-2

# R: ggplot - Plotting a single variable line chart (geom_line requires the following missing aesthetics: y)

I've been learning how to do moving averages in R and having done that calculation I wanted to plot these variables on a line chart using ggplot.

The vector of rolling averages looked like this:

``````
> rollmean(byWeek\$n, 4)
[1]  3.75  2.00  1.25  1.00  1.25  1.25  1.75  1.75  1.75  2.50  2.25  2.75  3.50  2.75  2.75
[16]  2.25  1.50  1.50  2.00  2.00  2.00  2.00  1.25  1.50  2.25  2.50  3.00  3.25  2.75  4.00
[31]  4.25  5.25  7.50  6.50  5.75  5.00  3.50  4.00  5.75  6.25  6.25  6.00  5.25  6.25  7.25
[46]  7.75  7.00  4.75  2.75  1.75  2.00  4.00  5.25  5.50 11.50 11.50 12.75 14.50 12.50 11.75
[61] 11.00  9.25  5.25  4.50  3.25  4.75  7.50  8.50  9.25 10.50  9.75 15.25 16.00 15.25 15.00
[76] 10.00  8.50  6.50  4.25  3.00  4.25  4.75  7.50 11.25 11.00 11.50 10.00  6.75 11.25 12.50
[91] 12.00 11.50  6.50  8.75  8.50  8.25  9.50  8.50  8.75  9.50  8.00  4.25  4.50  7.50  9.00
[106] 12.00 19.00 19.00 22.25 23.50 22.25 21.75 19.50 20.75 22.75 22.75 24.25 28.00 23.00 26.00
[121] 24.25 21.50 26.00 24.00 28.25 25.50 24.25 31.50 31.50 35.75 35.75 29.00 28.50 27.25 25.50
[136] 27.50 26.00 23.75
``````

I initially tried to plot a line chart like this:

``````
library(ggplot2)
library(zoo)
rollingMean = rollmean(byWeek\$n, 4)
qplot(rollingMean) + geom_line()
``````

which resulted in this error:

``````
stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
Error: geom_line requires the following missing aesthetics: y
``````

It turns out we need to provide an x and y value if we want to draw a line chart. In this case we'll generate the 'x' value - we only care that the y values get plotted in order from left to right:

``````
qplot(1:length(rollingMean), rollingMean, xlab ="Week Number") + geom_line()
``````

If we want to use the 'ggplot' function then we need to put everything into a data frame first and then plot it:

``````
ggplot(data.frame(week = 1:length(rollingMean), rolling = rollingMean),
aes(x = week, y = rolling)) +
geom_line()
``````