我想在一张纸上复制盒子图,看起来像这样:

enter image description here

框图按一个连续变量(i-在x轴上索引)和一个因素变量(方法-按 colored颜色 索引)分组.

以下是我的副本,一切看起来都很好,但框图组并不是根据连续变量的值放置的:

enter image description here

我的代码如下所示:

df5 <- data.frame(
  I = factor(rep(c(50, 100, 200, 400), each = dim(df1)[1])),
  rbind(df1, df2, df3, df4)
)
ggplot(df5, aes(x = I, y = Values*1e05, fill = Method)) +
  geom_boxplot() +
  scale_fill_manual(values = c("#E41A1C", "#377EB8", "#4DAF4A", "#FF7F00")) +
  labs(x = "I (Number of subjects)", y = expression(paste("MISE(", beta[1], "(s))(x", 10^-5, ")"))) +
  theme_minimal()

我不得不说,我需要将连续变量的类型更改为FACTOR,才能正确显示四组框图.但是框图组现在是等间距的(不是根据连续变量的值:50、100、200、400).

你能给我一些关于如何处理这件事的提示吗?谢谢!

推荐答案

问题是你在xI上映射的变量是factor,而不是numeric.因此,为了获得您想要的结果,请将I转换为numeric.此外,要实现这一点,您还必须显式映射到group AES上,以便箱形图仍按IMethod分组.为此,我将interaction(I, Method)号 map 绘制在group号 map 上.最后,我使用scale_x_continuous根据数据中的值I设置中断.

使用一些虚假的随机示例数据:

df1 <- df2 <- df3 <- df4 <- expand.grid(
  Method = letters[1:4],
  Values = seq(100)
) |>
  transform(Values = runif(400))

df5 <- data.frame(
  I = factor(rep(c(50, 100, 200, 400), each = dim(df1)[1])),
  rbind(df1, df2, df3, df4)
)

library(ggplot2)

df5$I <- as.numeric(as.character(df5$I))

ggplot(df5, aes(
  x = I, y = Values * 1e05,
  fill = Method,
  group = interaction(I, Method)
)) +
  geom_boxplot() +
  scale_fill_manual(
    values = c("#E41A1C", "#377EB8", "#4DAF4A", "#FF7F00")
  ) +
  scale_x_continuous(breaks = unique(df5$I)) +
  labs(
    x = "I (Number of subjects)",
    y = expression(
      paste("MISE(", beta[1], "(s))(x", 10^-5, ")")
    )
  ) +
  theme_minimal()

R相关问答推荐

更改网格的crs以匹配简单要素点对象的crs

寻找图片边缘

如何利用模型函数在格图中添加双曲/指数曲线

整数成随机顺序与约束R?

ggplot2中的X轴显示数值,单位为百,而不是十

将向量组合到一个数据集中,并相应地命名行

Rplotly中的Sankey Diagram:意外连接&

提取第一个下划线和最后一个下划线之间的任何内容,例外情况除外

R:从geom_ol()中删除轮廓并导出为pdf

以相同的方式对每个表进行排序

比较理论阿尔法和经验阿尔法

展开对数比例绘图的轴(添加填充)

R如何计算现有行的总和以添加新的数据行

扩展R中包含列表的数据框

将摘要图添加到facet_WRAP gglot的末尾

`-`是否也用于数据帧,有时使用引用调用?

如何将图例文本添加到图例符号中

使用dqur在不同变量上创建具有多个条件的变量

从字符串01JAN2021创建日期

在子图内和子图之间对齐行数不均匀的表格罗布对