То, что вы хотите сделать, не может быть легко сгенерировано с помощью каркаса boxplot.
Базовым блокпостом в R является функция boxplot.stats()
.Давайте запустим это на ваших данных:
boxplot.stats(Mydata)
$stats
[1] 1 152 204 253 300
$n
[1] 502
$conf
[1] 196.8776 211.1224
$out
[1] 500
Вы можете видеть, что $stats
возвращается в следующем порядке: нижний усик, 25% квантиль, медиана, 75% квантиль, верхний усик.Сравните с quantile
:
quantile(Mydata)
0% 25% 50% 75% 100%
1 152 204 253 500
Если вы используете geom_boxplot()
из ggplot2
, можно переопределить значения, используемые для поля.Но вы можете нарисовать только те же пять значений: они называются ymin
, lower
, middle
, upper
и ymax
.
Так, например, если вы хотите, чтобы квантиль 2,5% какlower
и 97,5% квантиля как upper
, вы можете попробовать:
data.frame(x = 1,
y0 = min(Mydata),
y025 = quantile(Mydata, 0.025),
y50 = median(Mydata),
y975 = quantile(Mydata, 0.975),
y100 = max(Mydata)) %>%
ggplot(df, aes(x)) +
geom_boxplot(aes(ymin = y0,
lower = y025,
middle = y50,
upper = y975,
ymax = y100),
stat = "identity")
Однако вы хотели бы прояснить это(возможно, используя метки), что это не «стандартный» блок-график.
Другая идея ggplot2
состоит в том, чтобы использовать geom_jitter
для построения точек данных, а затем добавить линии для нужных квантилей, используя geom_hline
.Примерно так:
library(tibble)
library(ggplot2)
Mydataq <- quantile(Mydata, probs = c(0.025, 0.25, 0.5, 0.7, 0.75, 0.975)) %>%
as.data.frame() %>%
setNames("value") %>%
rownames_to_column(var = "quantile")
Mydataq %>%
ggplot() +
geom_hline(aes(yintercept = value, color = quantile)) +
geom_jitter(data = tibble(x = "Mydata", y = Mydata),
aes(x = x, y = y))