在箱线图中添加多条水平线

5

我知道可以使用类似下面的命令为箱线图添加水平线:

abline(h=3)

当一个面板中有多个箱线图时,我能为每个单独的箱线图添加不同的水平线吗?

enter image description here

在上面的图中,我想添加线条'y=1.2'表示1,'y=1.5'表示2,以及'y=2.1'表示3。

1
只需运行3个abline(),每个都有一个。 - MLavoie
@MLavoie 不,那样每个图形就会有三条水平线。我只想要每个图形中的 '一条' 线。 - user67275
如果我使用“abline”命令,则该线将应用于所有三个箱形图。我希望它仅适用于一个图。 - user67275
看起来你想要一条线来代表每个箱子的平均值? - MLavoie
运行 abline 三次将无论绘图中存在多少个箱线图,都会向其添加三条线。如果您需要在特定 x 范围内的水平线,则可以查看 segments 函数。 - narendra-choudhary
1个回答

7

我不确定我完全理解你想要什么,但可能是这样:为每个箱线图添加一行,该行覆盖与箱线图相同的x轴范围。

箱子的宽度由pars$boxwex控制,默认设置为0.8。这可以从boxplot.default的参数列表中看到:

formals(boxplot.default)$pars
## list(boxwex = 0.8, staplewex = 0.5, outwex = 0.5)

因此,以下内容将为每个箱线图生成一个线段:
# create sample data and box plot
set.seed(123)
datatest <- data.frame(a = rnorm(100, mean = 10, sd = 4),
                       b = rnorm(100, mean = 15, sd = 6),
                       c = rnorm(100, mean = 8, sd = 5))
boxplot(datatest)

# create data for segments
n <- ncol(datatest)
# width of each boxplot is 0.8
x0s <- 1:n - 0.4
x1s <- 1:n + 0.4
# these are the y-coordinates for the horizontal lines
# that you need to set to the desired values.
y0s <- c(11.3, 16.5, 10.7)

# add segments
segments(x0 = x0s, x1 = x1s, y0 = y0s, col = "red")

这将得到以下的图表:

这里输入图片描述


我原本以为我需要根据盒子的数量来计算它们的宽度,但事实证明0.8总是有效的!这让事情变得更容易了。 - Toby Bloem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接