将平均值添加到构面

Mig*_*uel 5 r ggplot2 facet-wrap

我有这个图,它计算给定冬天鸟类物种的丰富度指数: 按年份分类 此图形来自此代码(不包括主题和比例):

ggplot (a, aes (pentada,ika,colour=inv,group=inv,na.rm=T)) + geom_line()+
facet_wrap(~inv, ncol=3)+labs(title="SYLATR\n",x="",y="IKA")
Run Code Online (Sandbox Code Playgroud)

并且数据框有 6 个变量:

pentada / censos / yr / total / inv / ika

问题是我想在每个越冬季节添加一条线,显示所有年份的丰度平均值,但我不知道如何。我应该在每个越冬季节后将平均值作为新列附加吗?在这种情况下,我该怎么做?

谢谢你。

Cur*_* F. 5

我不确定您是否想要全球平均值,即冬季和天数的平均值。如果是这样,那么上面的 shadow 解决方案可能是最好的;像这样的事情也可以:

#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)))
Run Code Online (Sandbox Code Playgroud)

如果您只想要平均越冬,以便白天仍然有动态,我认为您应该先将其添加到数据框中,然后再调用 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')
Run Code Online (Sandbox Code Playgroud)

第二个代码片段产生了这张图:

第二个代码片段的图表,仅包含平均年数

更新:如果您将平均数据放回数据框中,您可能会更容易绘图,以便您可以绘制来自同一数据框中的所有图层,而不是将多个帧中的数据混合/匹配到一个图中。

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')
Run Code Online (Sandbox Code Playgroud)