在散点图中绘制95%置信区间

koe*_*bro 7 r scatter-plot ggplot2 confidence-interval

我需要绘制几个定义为的数据点

c(x,y,stdev_x,stdev_y)

作为具有95%置信限的表示的散点图,示例显示了点和围绕它的一个轮廓.理想情况下,我想在点周围绘制椭圆形,但不知道该怎么做.我正在考虑构建样本并绘制它们,添加stat_density2d()但是需要将轮廓数量限制为1,并且无法弄清楚如何去做.

require(ggplot2)
n=10000
d <- data.frame(id=rep("A", n),
                se=rnorm(n, 0.18,0.02), 
                sp=rnorm(n, 0.79,0.06) )
g <- ggplot (d, aes(se,sp)) +
  scale_x_continuous(limits=c(0,1))+
  scale_y_continuous(limits=c(0,1)) +
  theme(aspect.ratio=0.6)
g + geom_point(alpha=I(1/50)) +
  stat_density2d()
Run Code Online (Sandbox Code Playgroud)

Did*_*rts 6

首先,将所有绘图保存为对象(更改限制).

g <- ggplot (d, aes(se,sp, group=id)) +
  scale_x_continuous(limits=c(0,0.5))+
  scale_y_continuous(limits=c(0.5,1)) +
  theme(aspect.ratio=0.6) + 
  geom_point(alpha=I(1/50)) +
  stat_density2d()
Run Code Online (Sandbox Code Playgroud)

使用功能ggplot_build()保存用于绘图的所有信息.轮廓存储在对象中data[[2]].

gg<-ggplot_build(g)
str(gg$data)
head(gg$data[[2]])
  level         x         y piece group PANEL
1    10 0.1363636 0.7390318     1   1-1     1
2    10 0.1355521 0.7424242     1   1-1     1
3    10 0.1347814 0.7474747     1   1-1     1
4    10 0.1343692 0.7525253     1   1-1     1
5    10 0.1340186 0.7575758     1   1-1     1
6    10 0.1336037 0.7626263     1   1-1     1
Run Code Online (Sandbox Code Playgroud)

总共有12条轮廓线,但只保留外线,您应该只选择子集group=="1-1"并替换原始信息.

gg$data[[2]]<-subset(gg$data[[2]],group=="1-1")
Run Code Online (Sandbox Code Playgroud)

然后使用ggplot_gtable()grid.draw()得到你的情节.

p1<-ggplot_gtable(gg)
grid.draw(p1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


koe*_*bro 3

stat_ellipse() 刚刚在这里(和这里)找到了这个函数,它完美地处理了这个问题。

g + geom_point(alpha=I(1/10))  +
  stat_ellipse(aes(group=id), color="black")
Run Code Online (Sandbox Code Playgroud)

当然,不同的数据集: