如何在boxplot中添加行和文本?

时间:2018-04-29 17:36:37

标签: r boxplot

我正在尝试在箱线图上添加85%和95%百分位的线条以及该百分位数的记录。 这是我的代码:

boxplot(x[x>0], log = "y") +
  abline(h = quantile(x,0.85), col = 'red') +
  text(y = quantile(x,0.95), labels = quantile(x,0.95), col = 'red')

它显示错误消息:

Error in boxplot(x[x > 0], log = "y") + abline(h = quantile(x, 0.85),  : 
  non-numeric argument to binary operator

然而,它正在运作,但没有文字!如果你能帮我解决这个问题,我将不胜感激

p.s x是事务数据的向量(高度偏斜),因此我使用y登录的原因。

非常感谢

1 个答案:

答案 0 :(得分:0)

我认为你想要85%和95%的线路。这使得两条线都使用一些虚假数据标记它们。我还添加了options(scipen=5)以避免y轴上的科学记数法。

## Bogus data
set.seed(1234)
x = pmax(rnorm(400, 225, 70), 0)^2

options(scipen=5)
boxplot(x[x>0], log = "y")
abline(h = quantile(x,c(0.85, 0.95)), col = 'red') 
text(x=0.6, y = quantile(x,c(0.85, 0.95)), pos=c(1,3), cex=0.8,
    labels = round(quantile(x,c(0.85, 0.95))), col = 'red')

Boxplot

更新

如果您让该行经过该文本,则很难阅读。既然你想要" alignment",也许你宁愿只有一个线段而不是一个完整的线。这样,文本可以与行处于同一级别。更改颜色就像提供所需颜色列表一样简单。

options(scipen=5)
boxplot(x[x>0], log = "y")
segments(c(0.8,0.8), quantile(x,c(0.85, 0.95)),
    c(1.2,1.2), quantile(x,c(0.85, 0.95)), col=c('red', 'seagreen'))
text(x=0.64, y=quantile(x,c(0.85, 0.95)), cex=0.8, col=c('red', 'seagreen'),
    labels = paste(c("85th percentile = ", "95th percentile = "),
    round(quantile(x,c(0.85, 0.95)))))

Boxplot 2