R:如何根据间距绘制带有数字 x 轴的箱线图(不是 ggplot)

R: How to plot a boxplot with numeric x-axis for according spacing (not ggplot)

我想用 R 的常规 /boxplot 函数而不是 ggplot 绘制箱线图。 Y 轴和 X 轴是连续的数值变量(x 轴 6 个力:1.0、1.3、1.6、2.0、2.5、3.1 [N]) 在 Y 轴上,参与者评分(1 到 7)。

我想绘制它,在 x 轴上使用量化间距,然后将回归线添加到图中。找不到常规 /boxplot 函数的任何内容。

到目前为止的代码:

kraft_ou <- data.frame(VR1_100$ou_kraft, 
                       VR1_125$ou_kraft, 
                       VR1_160$ou_kraft, 
                       VR1_200$ou_kraft, 
                       VR1_250$ou_kraft, 
                       VR1_310$ou_kraft)
colnames(kraft_ou) <- c("kraft_100", "kraft_125", "kraft_160", "kraft_200", "kraft_250", "kraft_310")
kraft_ou

boxplot(kraft_ou,
        names=c("1,0 [N]", "1,3 [N]","1,6 [N]","2,0 [N]","2,5 [N]","3,1 [N]"), 
        col = "bisque",
        ylim = c(1, 7))
points(1:6, meanskraftou, pch=4)
text(1:6, meanskraftou + 0.24, labels = meanskraftou)
abline(h=4)

数据(对于 6 种力中的每一种,n=30 个评分,从 1 到 7):

dput(kraft_ou) structure(list(kraft_100 = c(4, 3, 5, 5, 3, 4, 2, 4, 4, 5, 4, 5, 5, 4, 4, 3, 4, 4, 5, 4, 6, 5, 4, 5, 5, 5, 4, 4, 4, 4), kraft_125 = c(4, 4, 5, 6, 4, 3, 4, 4, 4, 5, 4, 5, 4, 5, 4, 3, 4, 4, 4, 6, 6, 4, 4, 5, 3, 5, 4, 4, 4, 5), kraft_160 = c(5, 6, 6, 6, 6, 4, 6, 5, 6, 5, 4, 3, 6, 6, 6, 5, 5, 5, 5, 6, 6, 6, 5, 5, 4, 6, 4, 5, 5, 5), kraft_200 = c(6, 5, 6, 6, 5, 4, 5, 5, 6, 7, 5, 3, 5, 5, 5, 4, 7, 6, 5, 5, 7, 6, 5, 6, 6, 6, 5, 4, 5, 3), kraft_250 = c(5, 6, 6, 7, 6, 6, 6, 6, 7, 7, 6, 5, 7, 7, 5, 5, 6, 6, 7, 7, 6, 6, 5, 5, 5, 7, 4, 6, 6, 5), kraft_310 = c(7, 7, 7, 7, 6, 5, 6, 6, 6, 7, 4, 5, 7, 6, 5, 5, 7, 6, 5, 6, 6, 6, 5, 6, 5, 6, 5, 6, 6, 6)), class = "data.frame", row.names = c(NA, -30L))

您可以使用 at 参数为您的箱线图指定 x 位置,但要使它们足够窄以避免过度绘制,您需要添加一个不可见的框并将可见框的相对宽度设置为较小的值:

boxplot(cbind(kraft_ou, n = rep(NA, nrow(kraft_ou))),
        names=c("1,0 [N]", "1,3 [N]","1,6 [N]","2,0 [N]","2,5 [N]","3,1 [N]",
                " "), 
        col = "bisque",
        ylim = c(1, 7), width = c(0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 1),
        at = c(1, 1.3, 1.6, 2.0, 2.5, 3.1, 3.1))
abline(h = 4)

要添加回归线,您需要将所有数据框值放在一个 y 变量中,以及它们对应的 x 轴位置的向量:

abline(lm(unlist(kraft_ou) ~ rep(c(1, 1.3, 1.6, 2.0, 2.5, 3.1), each = 30)))