我正在编写一个脚本,我需要在不立即绘图的情况下计算一个beeswarm图的坐标。当我使用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)
在我看来,犹豫不决地使用类似当前情节参数(或者它被称为)的东西来进行蜂拥而来,因此当情节没有显示时会窒息。我曾尝试使用诸如间距,休息,畜栏,corralWidth,优先级和xlim之类的beeswarm参数,但它没有任何区别。仅供参考:如果将do.plot设置为TRUE,则会正确计算x坐标,但这不会有用,因为我不想立即绘制。
非常感谢任何提示或评论!
答案 0 :(得分:1)
您是对的; beeswarm使用当前的绘图参数来计算点之间留出的空间量。似乎设置“ do.plot = FALSE”并不能达到预期效果,而且我不确定为什么要包含此参数。
如果要手动控制参数,则可以改用功能swarmx
或swarmy
。这些功能必须分别应用于每个组,例如
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,然后丢弃这些图。