Я не уверен, хотите ли вы глобальное среднее значение, то есть усреднение по зимам и дням. Если это так, то теневое решение выше, вероятно, лучше; что-то вроде этого также будет делать:
#toy data
df <- data.frame(t = rep(1:100,9), pop = rnorm(900)+20,
year = rep(letters[1:9], 9, each = 100))
#make graph
ggplot(data = df, aes(x = t, y = pop, colour = year, na.rm=T)) +
geom_line() + facet_wrap(~year, ncol = 3) +
geom_line(aes(x=t, y = mean(pop)))
Если вам нужно среднее значение только для зимы, чтобы по-прежнему была динамика по дням, я думаю, вам, вероятно, следует сначала добавить это во фрейм данных, прежде чем вызывать ggplot.
#aggregate the mean population over years but not days
yearagg.df <- aggregate(data = df, pop ~ t, mean)
#make plot
ggplot(data = df, aes(x = t, y = pop, colour = year, na.rm=T)) +
geom_line() +
facet_wrap(~year, ncol = 3) +
geom_line(data = yearagg.df, aes(y = pop, x=t), color = 'black')
Этот второй фрагмент кода приводит к следующему графику:
ОБНОВЛЕНИЕ: вам, вероятно, будет проще строить графики, если вы поместите усредненные данные обратно во фрейм данных, чтобы вы могли отображать все слои из одного фрейма данных вместо смешивания/сопоставления. данные из нескольких кадров в один график.
df.m <- merge(df, yearagg.df, by = 't', suffixes = c('.raw', '.mean'))
ggplot(data = df.m, aes(x = t, colour = year, na.rm=T)) +
geom_line(aes(y = pop.raw)) +
facet_wrap(~year, ncol = 3) +
geom_line(aes(y = pop.mean), color = 'gray')
person
Curt F.
schedule
17.02.2015