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

如何用R的ggmagnify完整放大绘图中Estimator A和B的区域?

解决ggmagnify完整放大Estimator A和B区域并避免箱线图截断的问题

原代码的问题在于geom_magnify的from参数逻辑不准确,且未明确指定需要放大的完整区域范围。结合coord_flip()的轴翻转特性,可通过以下调整解决问题:

  1. 明确放大区域范围:因为使用了coord_flip(),原x轴(Estimator)转为y轴,原y轴(Times)转为x轴。Estimator作为因子变量,A、B、C对应的水平值分别为1、2、3。要完整覆盖A和B的区域,需指定y轴范围为1到2,x轴范围为0到1(A和B的Times最大值)。
  2. 调整放大后区域位置:设置to参数的范围,确保放大后的区域有足够空间容纳箱线图、小提琴图等元素,避免截断。

修改后的完整代码如下:

times <- data.frame(
  "Times" = c(sample(seq(0, 1, 0.01), 1000, replace = TRUE), 
              sample(c(40:70), 500, replace = TRUE)), 
  "Estimator" = rep(c("A", "B", "C"), each = 500)
)

library(ggmagnify)
library(ggplot2)
library(PupillometryR)

times %>%
  ggplot() +
  aes(x = Estimator, y = Times) +
  geom_point(aes(color = Estimator),
             position = position_jitter(w = .15),
             size = 0.5,
             alpha = 0.15) +
  geom_boxplot(width = .24,
               outlier.shape = NA,
               alpha = 0.5) +
  geom_flat_violin(position = position_nudge(x = .2),
                   trim = TRUE, 
                   alpha = 1, 
                   scale = "width") +
  scale_fill_manual(values = c("#00AFBB", "#E7B800", "#FC4E07")) +
  scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07")) + # 统一点与填充色
  coord_flip() +
  geom_magnify(
    from = c(0, 1, 1, 2), # 翻转后轴范围:x(Times)0-1,y(Estimator水平)1-2
    to = c(20, 30, 1, 2), # 放大后区域的位置
    shape = "ellipse", 
    shadow = FALSE
  )

关键修改说明:

  • from参数:直接指定翻转后的轴范围,确保完整覆盖A和B的所有数据区域,避免部分放大。
  • scale_color_manual:让散点颜色与箱线图、小提琴图的填充色一致,视觉效果更统一。
  • to参数:保持y轴范围与原区域匹配,x轴设置在20-30区间,给放大后的图形元素足够显示空间,避免截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:22:41