我在R中使用ggplot2来可视化一些不同因素的相互作用。到目前为止,这完全符合我的要求:
ggplot(dta_trim, aes(x=Treatment, y=Result, fill=Gender)) +
geom_boxplot()
字符串
换句话说,它首先按治疗将x轴上的数据划分,然后按性别划分,并在y轴上显示结果。
但是,如果我使用geom_boxplot
以外的任何几何体,它不再被性别整除。例如:
... +
geom_point(position=position_jitter(width = .1), alpha=.15, size=2) +
stat_summary(fun=mean, geom="point") +
stat_summary(fun.data=mean_cl_boot, geom="errorbar", width=0.3)
型
的数据
更具体地说,它似乎确实按性别划分了数据,但并没有在x轴上将它们分开(你可以看到男性和女性组的平均值分开绘制,但一个在另一个的正上方)。
我怎样才能让这些其他的几何体在x轴上按性别分开,就像geom_boxplot
一样?我以为把位置函数设置为position_dodge
就可以了,但它并没有像我希望的那样分开它们。
2条答案
按热度按时间iq0todco1#
与默认使用
position_dodge
的geom_boxplot
相反,geom_point
或geom_errorbar
使用position="identity"
。因此,如果你想避开其他层,你必须告诉ggplo2
这样做,为这些层设置position = position_dodge(width = .75)
,除了你必须使用position_jitterdodge
的抖动点。使用一些基于
mtcars
的假示例数据:字符串
的数据
qq24tv8q2#
https://psyteachr.github.io/introdataviz/representing-summary-statistics.html#grouped-violin-boxplots
如果你看一下上面的链接,你会看到他们是如何做到的。本质上,你需要为每个元素指定position = position_dodge(width = 0.6)或任何你选择的宽度(boxplot,geom_point,stat_summary)。这将确保每个元素正确对齐。对于geom_point(position = position_jitter(...)),你可以用position_jitterdodge(...)替换它。