【问题标题】:Add multiple horizontal lines in a boxplot在箱线图中添加多条水平线
【发布时间】:2016-03-25 18:53:27
【问题描述】:

我知道我可以使用类似的命令在箱线图中添加一条水平线

abline(h=3)

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

在上图中,我想为 1 添加行 'y=1.2',为 2 添加行 'y=1.5',为 3 添加行 'y=2.1'。

【问题讨论】:

  • 只运行 3 个 abline(),每个一个
  • @MLavoie 不,那么每个地块会有三条水平线。我只希望每个情节只有“一条”线。
  • @MLavoie 如果我使用“abline”命令,这条线适用于所有三个箱线图。我希望它只应用于一个情节。
  • 所以看起来你想要一条线来表示每个框的平均值?
  • 运行abline 3 次将在图中添加 3 行,而与图中存在的箱线图数量无关。如果您想要x 特定范围的水平线,请查看segments 函数。

标签: r line boxplot


【解决方案1】:

我不确定我是否完全理解您想要什么,但可能是这样:为每个箱线图添加一条线,该线覆盖与箱线图相同的 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 总是有效的!让这变得更容易