time_pic <- ggplot(data_box, aes(x=Kind, y=TimeTotal, fill=Sitting_Position)) +
geom_boxplot()
print(time_pic)
time_pic+labs(title="", x="", y = "Time (Sec)")
我运行了以上代码以获取下图。但是我不知道如何为这张图片上的每个箱线图添加平均值。
已更新。 我尝试过了。
means <- aggregate(TimeTotal ~ Sitting_Position*Kind, data_box, mean)
ggplot(data=data_box, aes(x=Kind, y=TimeTotal, fill=Sitting_Position)) +
geom_boxplot() +
stat_summary(fun=mean, colour="darkred", geom="point", shape=18, size=3,show_guide = FALSE) +
geom_text(data = means, aes(label = TimeTotal, y = TimeTotal + 0.08))
这是现在的样子。两个点在同一行上。并且两个值相互重叠。
答案 0 :(得分:3)
正如其他人所说,您可以共享您的数据集以获得更具体的帮助,但是在这种情况下,我认为可以使用虚拟数据集来说明这一点。我正在创建一个看起来与您自己的命名非常相似的代码,因此从理论上讲,您只需插入此代码即可使用。
您在这里最大的需要是控制ggplot2
如何分隔data_box$Sitting_Position
共享相同data_box$Kind
的单独箱形图。围绕x=
轴值分离和扩展框的过程称为“躲避”。当您为该几何图形在fill=
中提供color=
或aes()
(或其他)美感时,ggplot2
知道它会假定您也要根据那个价值。因此,您最初的ggplot()
调用在aes()
中有fill=Sitting_Position
,这意味着geom_boxplot()
是“有效的”-它创建了单独的框,这些框的颜色不同并且被“闪避” ”。
创建点和文本时,ggplot2
不知道您要“躲避”此数据,即使您确实想躲避,也要基于什么基础来躲避,因为fill=
审美对于文本或点几何没有意义。如何解决这个问题?答案是:
提供group=
美学,它可以覆盖fill=
或color=
美学的分组,但也可以作为躲避几何元素的基础没有类似的美感。
更清楚地指定您想躲避的方式。这对于准确定位要闪避的所有物体非常重要。否则,您将躲闪一些东西,但距离可能不一样。
这是我将所有这些结合在一起的方式:
# the datasets
set.seed(1234)
data_box <- data.frame(
Kind=c(rep('Model-free AR',100),rep('Real-world',100)),
TimeTotal=c(rnorm(50,5.5,1),rnorm(50,5.43,1.1),rnorm(50,4.9,1),rnorm(50,4.7,0.2)),
Sitting_Position=rep(c(rep('face to face',50),rep('side by side',50)),2)
)
means <- aggregate(TimeTotal ~ Sitting_Position*Kind, data_box, mean)
# the plot
ggplot(data_box, aes(x=Kind, y=TimeTotal)) + theme_bw() +
# specifying dodge here and width to avoid overlapping boxes
geom_boxplot(
aes(fill=Sitting_Position),
position=position_dodge(0.6), width=0.5
) +
# note group aesthetic and same dodge call for next two objects
stat_summary(
aes(group=Sitting_Position),
position=position_dodge(0.6),
fun=mean,
geom='point', color='darkred', shape=18, size=3,
show.legend = FALSE
) +
geom_text(
data=means,
aes(label=round(TimeTotal,2), y=TimeTotal + 0.18, group=Sitting_Position),
position=position_dodge(0.6)
)
给你这个: