为构面添加均值
Adding mean value to facets
我有这个图,它计算给定冬季鸟类物种的丰度指数:
此图形来自此代码(不包括主题和比例):
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")
并且数据框有 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)))
如果你只想要平均过冬,这样白天仍然有动态,我想你应该先把它添加到数据框中,然后再调用 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')
第二个代码片段生成此图:
更新: 如果将平均数据放回数据框中,您可能会更容易绘图,这样您就可以绘制所有来自同一数据帧的图层而不是来自多个帧的 mixing/matching 数据到一个图中。
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')
我有这个图,它计算给定冬季鸟类物种的丰度指数:
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")
并且数据框有 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)))
如果你只想要平均过冬,这样白天仍然有动态,我想你应该先把它添加到数据框中,然后再调用 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')
第二个代码片段生成此图:
更新: 如果将平均数据放回数据框中,您可能会更容易绘图,这样您就可以绘制所有来自同一数据帧的图层而不是来自多个帧的 mixing/matching 数据到一个图中。
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')