Вопрос или проблема
Я хотел бы изменить способ отображения моих данных в функции базового боксплота.
Я хотел бы использовать интердекли как усики вместо того, что сейчас делает боксплот (мин-макс или межквартильный диапазон, умноженный на заданное число).
Поэтому я попробовал сохранить боксплот в переменной (p
) и заменить его атрибут “stats” (который определяет медиану, IQR и усики) на мои выбранные квантили.
Однако я не могу перерисовать объект (в ggplot, вероятно, я просто вызвал бы p
, но в случае боксплота он рисуется сразу, как только я его инстанцирую (даже если он сохранен в переменной), и затем ничего не происходит.
x <- c(0.94063886031258,1.03136025036433,0.952395711064118,
0.941071695551853,0.862653162449957,0.814470708156107,
1.05880072370121,0.984234604877728,1.01529921088281,
0.946563805766234,0.931529458894898,1.05621485359968)
set.seed(300)
x.boot <- sample(abs(1-x),replace=TRUE,size=1000)
x.q <- quantile(x.boot,c(.1,.25,.5,.75,.9))
p <- boxplot(x.boot)
p[["stats"]] <- matrix(x.q,ncol=1)
p
ИЗМЕНЕНИЕ
Я увидел, что на самом деле могу сделать это, чтобы сохранить график в редактируемом объекте, который затем можно перерисовать, но это далеко от идеала, поэтому, если не будет другой альтернативы, я, вероятно, буду использовать ggplot вместо этого.
boxplot(x.boot)
# сохранить график в редактируемом объекте
p <- recordPlot()
# внести некоторые изменения в нужные места
p[[1]][[9]][[2]][[3]] <- c(x.q[2],x.q[2],x.q[4],x.q[4])
p[[1]][[8]][[2]][[5]] <- c(x.q[1],x.q[5])
p[[1]][[8]][[2]][[3]] <- c(x.q[1],x.q[5])
p[[1]][[7]][[2]][[3]] <- c(x.q[1],x.q[5])
p[[1]][[7]][[2]][[5]] <- c(x.q[2],x.q[4])
p[[1]][[4]][[2]][[3]] <- c(x.q[2],x.q[2],x.q[4],x.q[4])
# перерисовать
plot.new()
p
Вам нужно использовать bxp()
. Он рисует боксплоты на основе заданных сводок.
p1 <- p2 <- boxplot(x.boot)
x.q <- quantile(x.boot, c(.1, .25, .5, .75, .9))
p2[["stats"]] <- matrix(x.q, ncol = 1)
par(mfrow = c(1, 2))
bxp(p1, main = "До")
bxp(p2, main = "После")
Ответ или решение
Чтобы изменить способ отображения данных в графику коробчатой диаграммы (boxplot) и использовать интердецильные значения в качестве усов, вы можете воспользоваться функцией bxp()
, которая позволяет рисовать коробчатые диаграммы на основе предоставленных сводок. Давайте рассмотрим, как это сделать шаг за шагом.
- Создайте выборку данных и получите необходимые квантильные значения:
x <- c(0.94063886031258, 1.03136025036433, 0.952395711064118, 0.941071695551853, 0.862653162449957, 0.814470708156107, 1.05880072370121, 0.984234604877728, 1.01529921088281, 0.946563805766234, 0.931529458894898, 1.05621485359968)
set.seed(300)
x.boot <- sample(abs(1 – x), replace = TRUE, size = 1000)
2. **Сохраните оригинальный график** и измените атрибуты:
```r
p1 <- boxplot(x.boot) # Создаем оригинальный график
x.q <- quantile(x.boot, c(.1, .25, .5, .75, .9)) # Вычисляем квантильные значения
p2 <- p1 # Копируем оригинальный объект
# Обновляем статистику в новом объекте
p2[["stats"]] <- matrix(x.q, ncol = 1)
- Используйте функцию
bxp()
для повторного рисования графиков:par(mfrow = c(1, 2)) # Установим отображение графиков в два столбца bxp(p1, main = "Оригинальный график") # Отображаем оригинальный график bxp(p2, main = "С измененными усами") # Отображаем изменённый график с интердецильными усами
Этот код создаст два графика: слева будет показан оригинальный график, а справа — график с усами, соответствующими интердецильным значениям. Функция bxp()
позволяет вам передать атрибут "stats" напрямую, обеспечивая больший контроль над тем, как будет выглядеть коробчатая диаграмма.
Вывод
Используя описанный метод, вы можете проще управлять параметрами вашего графика и настраивать его в соответствии с вашими требованиями. Использование bxp()
— это практичный и эффективный способ получения желаемого графика.