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)
首先,将所有绘图保存为对象(更改限制).
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)

stat_ellipse() 刚刚在这里(和这里)找到了这个函数,它完美地处理了这个问题。
g + geom_point(alpha=I(1/10)) +
stat_ellipse(aes(group=id), color="black")
Run Code Online (Sandbox Code Playgroud)
当然,不同的数据集: