我有一个数据集,可以在不同的日期对不同的群体进行测量。
我希望并排显示不同日期的不同日期测量结果,并根据测量日间间隔条形图,并将误差范围叠加在上面。
我在geom_bar
geom_errorbar
同意躲闪days = data.frame(day=c(0,1,8,15));
groups = data.frame(group=c("A","B","C","D", "E"), means=seq(0,1,length=5));
my_data = merge(days, groups);
my_data$mid = exp(my_data$means+rnorm(nrow(my_data), sd=0.25));
my_data$sigma = 0.1;
png(file="bar_and_errors_example.png", height=900, width=1200);
plot(ggplot(my_data, aes(x=day, weight=mid, ymin=mid-sigma, ymax=mid+sigma, fill=group)) +
geom_bar (position=position_dodge(width=0.5)) +
geom_errorbar (position=position_dodge(width=0.5), colour="black") +
geom_point (position=position_dodge(width=0.5), aes(y=mid, colour=group)));
dev.off();
时遇到麻烦。
这是一段简单的代码:
geom_bar
在图中,错误显示与其条形图有一个固定的偏移量(抱歉,即使ggplot2是主题,也不允许新手使用图表)。
在geom_errorbar
中调整binwidth时,偏移量不固定,每天都会发生变化。
请注意,geom_point
和geom_bar
同时躲闪。
如何让{{1}}同意其他两个?
任何帮助表示感谢。
答案 0 :(得分:18)
对齐问题部分是由于您的条形图未表示您想要的数据。以下排列正确:
ggplot(my_data, aes(x=day, weight=mid, ymin=mid-sigma, ymax=mid+sigma, fill=group)) +
geom_bar (position=position_dodge(), aes(y=mid), stat="identity") +
geom_errorbar (position=position_dodge(width=0.9), colour="black") +
geom_point (position=position_dodge(width=0.9), aes(y=mid, colour=group))
答案 1 :(得分:4)
第一个更改我根据advanced R style guide重新格式化了代码。
days <- data.frame(day=c(0,1,8,15))
groups <- data.frame(
group=c("A","B","C","D", "E"),
means=seq(0,1,length=5)
)
my_data <- merge(days, groups)
my_data$mid <- exp(my_data$means+rnorm(nrow(my_data), sd=0.25))
my_data$sigma <- 0.1
现在,当我们查看数据时,我们发现那一天是一个因素,其他一切都是相同的。
str(my_data)
要从图中删除空格,我将日期列转换为因子。在继续之前检查水平是否正确。
my_data$day <- as.factor(my_data$day)
levels(my_data$day)
我做的下一个更改是在aes
个参数中定义y。我确信你知道,这让ggplot知道在哪里寻找y值。然后我将位置参数更改为“闪避”并添加了stat="identity"
参数。 "identity"
参数告诉ggplot在y处绘制y。 geom_errorbar
从geom_bar
继承了闪避位置,因此您可以不指定,但geom_point
不会,因此您必须指定该值。默认躲闪是position_dodge(.9)
。
ggplot(data = my_data,
aes(x=day,
y= mid,
ymin=mid-sigma,
ymax=mid+sigma,
fill=group)) +
geom_bar(position="dodge", stat = "identity") +
geom_errorbar( position = position_dodge(), colour="black") +
geom_point(position=position_dodge(.9), aes(y=mid, colour=group))
答案 2 :(得分:4)
这是一个老问题,但由于我今天遇到了问题,我想添加以下内容:
在
geom_bar(position = position_dodge(width=0.9), stat = "identity") +
geom_errorbar( position = position_dodge(width=0.9), colour="black")
width
中的position_dodge
- 参数控制着相互躲避的东西的躲避宽度。然而,这会产生与棒一样宽的晶须,这可能是不希望的。
position_dodge外的另一个width-argument控制着胡须(和条形)的宽度:
geom_bar(position = position_dodge(width=0.9), stat = "identity", width=0.7) +
geom_errorbar( position = position_dodge(width=0.9), colour="black", width=0.3)
答案 3 :(得分:1)
有时您将aes(x=tasks,y=val,fill=group)
放在geom_bar
中,而不是ggplot
中。这是由于ggplot向前x
并根据每个组的位置指定它而引起的问题。