以下是我的示例数据:
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或其他包解决方案。
答案 0 :(得分: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")
根据您的规格制作......:
答案 1 :(得分:4)
以下是ggplot
答案的一个版本。从Sven's answer
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
来扩大积分,也可以进行其他调整。
答案 2 :(得分: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'))