对不起,如果这是一个愚蠢的问题,但如果我有这样的数据框......:
Year Location Value SE.Value
2010 USA 10 1
2010 USA 11 1
2011 USA 12 2
2011 USA 20 4
2012 USA 13 1
我想要一个条形图,每年绘制一次平均值,并使用SE.Value(标准误差)的总和来确定误差线。
这样做的正确方法是什么?
在我的方法(下面)中,我不断收到错误,我看到多个错误条,因为我认为它不是计算聚合值而是计算值之间的差异 - 每行的SE.Value。
err_bar_limits <- aes(ymin = (df$Value - df$SE.Value), ymax = (df$Value + df$SE.Value))
ggplot(data=df, aes(x=df$Year, y=df$Value)) + geom_bar(position="dodge", stat="identity") + geom_errorbar(err_bar_limits, width=0.2, position="dodge")
对于上述错误的示例,这就是我的意思:
由于上述问题,我调整了尝试......:
avg_vals <- aggregate(df$Value, list(df$Year), mean)
avg_se_vals <- aggregate(df$SE.Value, list(df$Year), mean)
我认为应该给我一个具有平均值或SE.Value按“年”分组的数据框,对吧?
然后从那里我尝试了......:
err_bar_limits <- aes(ymin = (avg_vals$Value - avg_se_vals$SE.Value), ymax = (avg_vals$Value + avg_se_vals$SE.Value))
ggplot(data=df, aes(x=df$Year, y=df$Value)) + geom_bar(position="dodge", stat="identity") + geom_errorbar(err_bar_limits, width=0.2, position="dodge")
但是我收到了错误
Aesthetics must be either length 1 or the same as the data
我知道这可能是一个愚蠢的错误,但我之前从未真正使用过ggplot,所以我有点卡在这里。
我知道我的原始方法是完全错误的,我需要按年度对误差条min / max进行分组,但我不确定如何以这种方式尝试来克服错误。
希望有意义......
答案 0 :(得分:1)
当您致电err_bar_limits
时,您将获得以下信息:
* ymax -> avg_vals$Value + avg_se_vals$SE.Value
* ymin -> avg_vals$Value - avg_se_vals$SE.Value
geom_bar()
无法理解这一点。因此,您应该直接将其提供给geom_bar
:
ggplot(data=df, aes(x=df$Year, y=df$Value)) +
geom_bar(position="dodge", stat="identity") +
geom_errorbar(aes(ymin = (avg_vals$Value - avg_se_vals$SE.Value), ymax = (avg_vals$Value + avg_se_vals$SE.Value)),
width=0.2, position="dodge")
这是我的代码:
avg_vals <- aggregate(df$Value, list(df$Year), mean)
avg_se_vals <- aggregate(df$SE.Value, list(df$Year), mean)
ndf = merge(avg_vals, avg_se_vals, by = "Group.1")
names(ndf) = c("Year", "Avg", "SE")
ndf
library(ggplot2)
ggplot(data = ndf, aes(x = ndf$Year, y = ndf$Avg)) +
geom_bar(position = "dodge", stat = "identity") +
geom_errorbar(aes(ymax = ndf$Avg + ndf$SE, ymin = ndf$Avg - ndf$SE),
width = 0.2, position = "dodge")