gpt4 book ai didi

r - 如何在箱线图中创建组之间的空间并控制轴标签的大小?

转载 作者:行者123 更新时间:2023-12-04 11:02:34 24 4
gpt4 key购买 nike

我想在来自 min(x) 的箱线图上显示 x 轴上的所有值至 max(x) .
样本数据:

set.seed(4)
x <- sample(1:30, 100, replace = TRUE)
y <- sample(1:25, 100, replace=TRUE)
z <- sample(LETTERS[1:2], 100, replace = TRUE, prob = c(.5, .5))
boxplot(y ~ z + x, las = 2, col = c(5, 7))
abline(v=seq(2.5,60,2), col = "grey60", lty = "dotted") # For orientation
sort(unique(x))

这里 6、27 和 29 不包括在 x 中。是否仍然可以将它们放在我的 x 轴上,但当然没有箱线图?正如 B.1 所表示的那样,尽管没有可用的值。我会对普通箱线图和 ggplot2 箱线图的解决方案感兴趣。

此外,有没有办法减少箱线图之间的差距,例如graphics::boxplot 中的 A.1 和 B.1,就像有 position = position_dodge(.9))对于 ggplot2 中的箱线图? (或者增加 B.1 和 A.2 之间的差距?)

很确定这个问题以前发生过,我可能找不到适合我的问题的正确翻译。

先谢谢了!

最佳答案

控制boxplot()的框之间的距离我们可以使用 at选项,“默认为 1:n,其中 n 是盒子的数量”。取而代之的是默认我们提供一个向量 VEC .

为了控制轴标签的大小,我们可以使用 cex.axis ,例如cex.axis=.8 .

例子

我正在使用来自 ?boxplot 的数据以帮助页面为例,它不会占用太多空间。
len是按照dose ~ supp分组的.所以盒子的数量是prod dim 的 uct根据 table .有了这些信息,我们创建了矢量 VEC出一个长度为 n 的序列(通过一些案例定制),我们从每个第二个元素中减去所需的调整。

n <- prod(dim(with(ToothGrowth, table(dose, supp))))
VEC <- seq(1, n/2, length.out=n)*2 - c(0, .2)
# [1] 2.0 2.6 3.6 4.2 5.2 5.8

绘图比较
op <- par(mfrow=c(2, 1))
# without grouping
boxplot(len ~ dose:supp, data=ToothGrowth,
boxwex=0.5, col=c("orange", "yellow"),
main="Guinea Pigs' Tooth Growth",
xlab="Vitamin C dose mg", ylab="tooth length",
sep=":", lex.order=TRUE, ylim=c(0, 35), yaxs="i",
cex.axis=.8)
text(.5, 32, "w/o grouping", col=2, adj=0, font=2)
# with grouping
boxplot(len ~ dose:supp, data=ToothGrowth,
boxwex=0.5, col=c("orange", "yellow"),
main="Guinea Pigs' Tooth Growth",
xlab="Vitamin C dose mg", ylab="tooth length",
sep=":", lex.order=TRUE, ylim=c(0, 35), yaxs="i",
cex.axis=.8, at=VEC)
text(1.5, 32, "w/ grouping", col=2, adj=0, font=2)
par(op)

enter image description here

当然,这可能需要根据具体情况进行一些调整,但您现在已经有了主意。

关于r - 如何在箱线图中创建组之间的空间并控制轴标签的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58708529/

24 4 0