我在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)

box plot not dividing by gender

更具体地说,它似乎确实按性别划分了数据,但并没有在x轴上将它们分开.(你可以看到男性和女性群体的平均值分别绘制,但一个在另一个的正上方.

我如何才能像geom_boxplot一样,让这些几何图形在x轴上按性别分开?我本以为将位置函数设置为position_dodge会起到作用,但它并没有像我所希望的那样将它们分开.

推荐答案

与默认情况下使用position_dodgegeom_boxplot相比,geom_pointgeom_errorbar使用position="identity".因此,如果你也想躲避其他层,你必须告诉ggplo2这样做,为这些层也设置position = position_dodge(width = .75),除了抖动点,你必须使用position_jitterdodge.

使用基于mtcars的一些虚假的示例数据:

library(ggplot2)

dta_trim <- mtcars |>
  dplyr::select(
    Treatment = cyl,
    Result = mpg,
    Gender = am
  ) |>
  dplyr::mutate(Treatment = factor(Treatment), Gender = factor(Gender))

ggplot(dta_trim, aes(x = Treatment, y = Result, fill = Gender)) +
  geom_boxplot() +
  geom_point(
    position = position_jitterdodge(
      dodge.width = 0.75, jitter.width = .1
    ),
    alpha = .15, size = 2
  ) +
  stat_summary(
    fun = mean, geom = "point",
    position = position_dodge(width = .75)
  ) +
  stat_summary(
    fun.data = mean_cl_boot, geom = "errorbar", width = 0.3,
    position = position_dodge(width = .75)
  )

R相关问答推荐

基于现有类创建类的打印方法(即,打印tibles更长时间)

在某些栏和某些条件下,替换dfs列表中的NA

在R中使用download. file().奇怪的URL?

在rpart. plot或fancyRpartPlot中使用带有下标的希腊字母作为标签?

使用rvest从多个页面抓取时避免404错误

从圆到R中的多边形的标绘雷达图

当我添加美学时,geom_point未对齐

从R中的对数正态分布生成随机数的正确方法

为左表中的所有行使用值Fill滚动左连接

有没有可能用shiny 的书签恢复手风琴面板?

在gggraph中显示来自不同数据帧的单个值

在R中的数据框上使用Apply()函数时,如何保留非数字列?

SHILINY中DT列的条件着色

如何在GALT包的函数&geom_x样条线中调整线宽

如何在刻面和翻转堆叠条形图中对齐geom_text()

分隔日期格式为2020年7月1日

将边列表转换为路径长度列表

汇总数据:在跨越()all_of()Dynamic_list_of_vars=>;所选内容不能有缺失值的汇总()中出错

真实世界坐标的逆st_变换

如何使用ggsurvfit包更改风险表中的标签名称?