1

我正在编写一个脚本,我需要在不立即绘制的情况下计算蜂群图的坐标。当我使用 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 参数,例如间距、休息、畜栏、畜栏宽度、优先级和 xlim,但它没有任何区别。仅供参考:如果do.plot设置为 TRUE,则 x 坐标计算正确,但这没有帮助,因为我不想立即绘制。

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

4

1 回答 1

1

你是对的; beeswarm 使用当前的绘图参数来计算点之间的空间量。似乎设置“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,然后丢弃这些图。

于 2018-07-27T13:18:31.887 回答