Ящичный график с доверительным интервалом и определение конкретных точек данных в r

Вот мой пример данных:

set.seed(1234)
myd <- data.frame (SN = 1:100, myv = round (rnorm(100, 5, 5), 2))
boxplot(myd$myv, col = "lightgreen")

Я хочу выделить часть коробчатой ​​диаграммы, которая попадает в доверительный интервал от 4,5 до 8,2. Также я хочу показать, как точки данных не попадают в доверительный интервал (> 8,2 и менее 4,5). Результат должен быть таким:

введите описание изображения здесь

Мне просто нужно достичь этой цели. ggplot2 или другое пакетное решение приветствуются.


person shNIL    schedule 07.01.2013    source источник
comment
Я до сих пор не знаю, что находится на диаграмме yaxis, так как шкала не отображается, так что никакого дальнейшего прогресса !! Я вижу ответ, пытаясь понять ответы   -  person shNIL    schedule 08.01.2013


Ответы (3)


Я не понимаю этого сюжета, но вы можете приспособиться к различиям.

> boxplot(myd$myv, col = "lightgreen", ylim=c(-10,18))s

Один из способов получить прозрачные цвета - это извлечь значения RGB из именованного цвета с помощью col2rgb, а затем передать обратно в rgb с соответствующим образом масштабированными значениями:

> col2rgb("purple")
#      [,1]
#red    160
#green   32
#blue   240
> rect(0.7, 4.5, 1.3, 8.2, col= rgb( red=160/255, green=32/255, blu=240/255, 0.4) )

Необходимо построить логический вектор, который может выбирать значения точек, а также быть основой для «подсчета» количества таких значений для функции points:

> points(x=rep(1, sum( myd$myv > 8.2 | myd$myv < 4.5 )), 
         y= myd$myv[   myd$myv > 8.2 | myd$myv < 4.5 ] , 
         col="orange", pch=19, bg="orange")

Создано с учетом ваших требований ...: введите описание изображения здесь

person IRTFM    schedule 07.01.2013

Вот вариант ответа ggplot. Начиная с ответа Свена

interval <- c(4.5, 8.2)
myd <- within(myd, group <- myv >= interval[1] & myv <= interval[2])

Код ggplot будет

ggplot(myd, aes(x = 0, y = myv)) +
    geom_boxplot(fill = "lightgreen") +
    annotate("rect", ymin = interval[1], ymax = interval[2],
             xmin = -1/2, xmax = 1/2, fill = "blue", alpha = 0.25) +
    geom_point(data=myd[!myd$group,], shape = 21,
               colour = "black", fill = "orange") +
    scale_x_continuous("", breaks = NULL) +
    theme_bw()

Сам коробчатый график прямолинейный. Голубоватый прямоугольник - это примечание поверх этого. Точки рисуются поверх этого, ограничивая данные только теми, которые находятся за пределами диапазона (как вычислено для group). scale_x_continuous избавляется от обозначений оси x, а theme_bw() дает более простой фон и линии сетки.

введите описание изображения здесь

Вы можете сделать точки больше, задав size слою geom_point, также возможны другие корректировки.

person Brian Diggs    schedule 07.01.2013

быстрое решение с использованием gridBase

set.seed(1234)
myd <- data.frame (SN = 1:100, myv = round (rnorm(100, 5, 5), 2))
boxplot(myd$myv, col = "lightgreen")
sp <- baseViewports()
pushViewport(sp$plot)
grid.rect(default.units='native', width= 1,height=8.2-4.5 ,
            gp=gpar(fill=rgb(1,0,0,0.5)), y = 3)
grid.points(x = rep(1,6) ,y=c(-4,-2,3,9,10,11),
         gp=gpar(col=rgb(1,1,0,0.5),default.units='native'))

введите описание изображения здесь

person agstudy    schedule 07.01.2013
comment
Мне могут потребоваться некоторые корректировки, чтобы поместить доверительный интервал в нужное место и сузить поле доверительного интервала .. Спасибо за решение, отлично! - person shNIL; 07.01.2013
comment
@shNIL Я сказал, что это быстрое решение, и мне жаль, что вы не показали, что вы пробовали, так что это минимум. - person agstudy; 08.01.2013