4

这是我的示例数据:

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 或其他软件包解决方案。

4

3 回答 3

6

我不明白那个情节,但你可以适应差异。

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

获得透明颜色的一种方法是使用 col2rgb 从命名颜色中提取 RGB 值,然后使用适当缩放的值传递回 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")

根据您的规格构建...:在此处输入图像描述

于 2013-01-07T19:18:56.333 回答
4

这是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()了更简单的背景和网格线。

在此处输入图像描述

您可以通过给图层赋予 asize来使点变大,并且也可以进行其他调整。geom_point

于 2013-01-07T20:52:30.387 回答
0

使用快速解决方案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'))

在此处输入图像描述

于 2013-01-07T19:23:45.930 回答