【发布时间】:2013-05-25 19:49:14
【问题描述】:
我有一个简单的数据框data
V1 V2 V3 V4 V5
1 3 3 3 5 6
2 3 4 6 10 12
3 5 6 8 10 11
4 4 5 7 9 11
5 2 3 5 8 9
此数据代表每轮比赛期间的表现。例如在游戏 4 中,一个人在第三次迭代中得分 7。
我正在尝试创建这样的情节(情节取自here):
x 轴上将四舍五入,y 轴上以标准差为条形的平均性能。第一轮的平均表现将在列 V1 (3.4) 中平均,第二轮为 4.2。标准差也是根据V列计算的。
感谢 BasterField,我正在通过以下方式转换我的数据:
df$n <- rownames(df)
df <- melt(df, id.vars="n", value.name="perf", variable.name="iter" )
dfc <- ddply(df, .(iter), summarise, se = sd( perf )/sqrt(length(perf)), perf = mean(perf))
这给了我以下结果:
iter se perf
1 V1 0.5099020 3.4
2 V2 0.5830952 4.2
3 V3 0.8602325 5.8
4 V4 0.9273618 8.4
5 V5 1.0677078 9.8
但后来,当我尝试使用 ggplot 时
ggplot(dfc, aes(x=iter, y=perf))+geom_errorbar(aes(ymin=perf-se, ymax=perf+se), width=.1)+geom_line()+geom_point()
我收到:geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?
该情节是在没有连接线的情况下构建的:
我还希望 Y 轴的最大值为 20。
【问题讨论】:
-
为什么不能先操作数据框? ggplot2 是围绕着你首先重塑数据然后绘制它的想法构建的。
-
你所说的“没有操纵”是什么意思,这个想法背后的动机是什么?
-
你的情节的问题是,iter 是一个分类变量。如果您想向其中添加
geom_line,您需要一个(伪)组。您可以通过将group =1添加到aes()来轻松解决此问题。但这是一个与您原来的问题完全不同的问题,应该单独讨论。