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

时间:2018-05-16 13:04:38

标签: r plot distribution beeswarm

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

但是,如果我再次生成相同的情节,它会正确地聚集: enter image description here

如果我使用dev.off(),我再也没有蜂拥而至:

enter image description here

我使用的代码:

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)

在我看来,犹豫不决地使用类似当前情节参数(或者它被称为)的东西来进行蜂拥而来,因此当情节没有显示时会窒息。我曾尝试使用诸如间距,休息,畜栏,corralWidth,优先级和xlim之类的beeswarm参数,但它没有任何区别。仅供参考:如果将do.plot设置为TRUE,则会正确计算x坐标,但这不会有用,因为我不想立即绘制。

非常感谢任何提示或评论!

1 个答案:

答案 0 :(得分: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,然后丢弃这些图。