Как добавить строки и текст в boxplot? - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь добавить строки с процентилями 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 голосов
/ 29 апреля 2018

Я думаю, что вы хотели строки для 85% и 95%. Это делает обе строки и маркирует их, используя некоторые поддельные данные. Я также добавил options(scipen=5), чтобы избежать научного обозначения на оси у.

## 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

Обновлен:

Если вы заставите строку пройти по тексту, ее будет трудно прочитать. Так как вы хотите "выравнивание", возможно, вы бы предпочли просто отрезок линии вместо полной линии Таким образом, текст может быть на том же уровне, что и строка. Изменить цвета так же просто, как предоставить список желаемых цветов.

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

...