You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绘制按连续变量与因子变量分组且x轴间距匹配数值的boxplot?

解决方案

问题根源是将连续变量I转为因子后,x轴变为离散型,导致每个分组的间距被强制均等。要保留实际数值间距,同时实现分组箱线图,可按以下方式修改:

方法1:保留I的连续数值型属性(推荐)

这种方式直接利用连续x轴的特性,通过position_dodge让同一I值下的不同Method箱线图并排显示:

  1. 创建数据框时,不要将I转为因子,保持其数值型:
df5 <- data.frame(
  I = rep(c(50, 100, 200, 400), each = dim(df1)[1]),
  rbind(df1, df2, df3, df4)
)
  1. 绘图时,使用position_dodge设置箱线图的并排宽度,同时指定x轴仅显示目标刻度:
ggplot(df5, aes(x = I, y = Values*1e05, fill = Method)) +
  geom_boxplot(position = position_dodge(width = 20)) + # width可根据需求调整,避免箱线图重叠
  scale_fill_manual(values = c("#E41A1C", "#377EB8", "#4DAF4A", "#FF7F00")) +
  scale_x_continuous(breaks = c(50, 100, 200, 400)) + # 仅显示指定的I值刻度
  labs(x = "I (Number of subjects)", y = expression(paste("MISE(", beta[1], "(s))(x", 10^-5, ")"))) +
  theme_minimal()

position_dodge的width参数可根据I的数值范围调整,比如当前I的间隔是50、100,设为20既能保证同一I值下的箱线图不重叠,又能保留连续轴的间距比例。

方法2:使用因子型I并自定义x轴间距(较繁琐)

如果必须保留I的因子类型,可通过ggh4x扩展包实现自定义离散轴间距:

  1. 安装并加载ggh4x:
install.packages("ggh4x")
library(ggh4x)
  1. 绘图时设置自定义轴截断范围:
ggplot(df5, aes(x = I, y = Values*1e05, fill = Method)) +
  geom_boxplot(position = position_dodge()) +
  scale_fill_manual(values = c("#E41A1C", "#377EB8", "#4DAF4A", "#FF7F00")) +
  scale_x_discrete(limits = factor(c(50, 100, 200, 400))) +
  guides(x = guide_axis_truncated(trunc_lower = c(0,50,100,200), trunc_upper = c(100,200,400,500))) +
  labs(x = "I (Number of subjects)", y = expression(paste("MISE(", beta[1], "(s))(x", 10^-5, ")"))) +
  theme_minimal()

这种方法需要手动计算每个因子水平的截断范围,不如方法1直观高效。


内容的提问来源于stack exchange,提问作者WuyaoKZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:35:58