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
问题是我想在每个越冬季节添加一条线,显示所有年份的丰度平均值,但我不知道如何。我应该在每个越冬季节后将平均值作为新列附加吗?在这种情况下,我该怎么做?
谢谢你。
我不确定您是否想要全球平均值,即冬季和天数的平均值。如果是这样,那么上面的 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)
| 归档时间: |
|
| 查看次数: |
5245 次 |
| 最近记录: |