R-package beeswarm 生成相同的 x 坐标

R-package beeswarm generates same x-coordinates

我正在编写一个脚本,我需要在不立即绘制的情况下计算蜂群图的坐标。当我使用 beeswarm 时,我得到的 x 坐标没有蜂群,并且或多或少具有相同的值:

但是如果我再次生成相同的图,它就会正确地蜂拥而至:

如果我使用 dev.off() 我又不会蜂拥而至:

我使用的代码:

n <- 250
df = data.frame(x = floor(runif(n, 0, 5)),
                y = rnorm(n = n, mean = 500, sd = 100))

#Plot 1:
A = with(df, beeswarm(y ~ x, do.plot = F))
plot(x = A$x, y=A$y)

#Plot 2:
A = with(df, beeswarm(y ~ x, do.plot = F))
plot(x = A$x, y=A$y)

dev.off()

#Plot 3:
A = with(df, beeswarm(y ~ x, do.plot = F))
plot(x = A$x, y=A$y)

在我看来,beeswarm 使用类似于当前绘图参数(或无论如何调用)的东西来进行蜂群,因此当绘图未显示时会窒息。我曾尝试使用 beeswarm 参数,例如 spacing、breaks、corral、corralWidth、priority 和 xlim,但这并没有什么不同。仅供参考:如果 do.plot 设置为 TRUE,则 x 坐标计算正确,但这没有帮助,因为我不想立即绘制。

非常感谢任何提示或意见!

你是对的; beeswarm 使用当前绘图参数来计算点之间要离开的 space 数量。似乎设置 "do.plot=FALSE" 并没有达到预期的效果,我不确定为什么要包含此参数。

如果您想手动控制参数,可以使用函数swarmxswarmy 代替。这些功能必须分别应用于每个组,例如

dfsplitswarmed <- by(df, df$x, function(aa) swarmx(aa$x, aa$y, xsize = 0.075, ysize = 7.5, cex = 1, log = ""))

dfswarmed <- do.call(rbind, dfsplitswarmed)

plot(dfswarmed)

在这种情况下,我根据函数为该特定数据集默认的值设置 xsize 和 ysize 值。如果您可以找到一组适用于您的数据的 xsize/ysize 值,则此方法可能适合您。

否则,也许更简单的方法是保留 do.plot=TRUE,然后丢弃绘图。