7

次のように定義されているいくつかのデータポイントをプロットする必要があります

c(x、y、stdev_x、stdev_y)

たとえば、ポイントとその周囲の1つの等高線を示す例として、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()
4

5 に答える 5

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()

関数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

合計12の等高線がありますが、外側の線だけを保持するには、サブセットgroup=="1-1"化して元の情報を置き換える必要があります。

gg$data[[2]]<-subset(gg$data[[2]],group=="1-1")

次に、とを使用ggplot_gtable()grid.draw()てプロットを取得します。

p1<-ggplot_gtable(gg)
grid.draw(p1)

ここに画像の説明を入力してください

于 2013-02-25T20:33:19.340 に答える
4

あなたが見つけた関数は本当に素晴らしい解決策のように見えますが、パッケージからstat_ellipse使用した、記録のための別の関数(非ggplot)があります。dataEllipsecar

# some sample data
n=10000
g=4
d <- data.frame(ID = unlist(lapply(letters[1:g], function(x) rep(x, n/g))))
d$x <- unlist(lapply(1:g, function(i) rnorm(n/g, runif(1)*i^2))) 
d$y <- unlist(lapply(1:g, function(i) rnorm(n/g, runif(1)*i^2))) 

# plot points with 95% normal-probability contour
# default settings...
library(car)
with(d, dataEllipse(x, y, ID, level=0.95, fill=TRUE, fill.alpha=0.1))

ここに画像の説明を入力してください

# with a little more effort...
# random colours with alpha-blending
d$col <- unlist(lapply(1:g, function (x) rep(rgb(runif(1), runif(1), runif(1), runif(1)),n/g)))
# plot points first
with(d, plot(x,y, col=col, pch="."))
# then ellipses over the top
with(d, dataEllipse(x, y, ID, level=0.95, fill=TRUE, fill.alpha=0.1, plot.points=FALSE, add=TRUE,  col=unique(col), ellipse.label=FALSE, center.pch="+"))

ここに画像の説明を入力してください

于 2013-02-26T09:48:18.823 に答える
4

latticeExtra提供panel.ellipseされるのは、おそらく3番目の変数によってグループ化された2変量データから信頼楕円体を計算して描画する格子パネル関数です。

ここで私はあなたのデータを訴えるレベル0.65と0.95を描きます。

library(latticeExtra)
xyplot(sp~se,data=d,groups=id,
       par.settings = list(plot.symbol = list(cex = 1.1, pch=16)),
       panel = function(x,y,...){
         panel.xyplot(x, y,alpha=0.2)
         panel.ellipse(x, y, lwd = 2, col="green", robust=FALSE,  level=0.65,...)
         panel.ellipse(x, y, lwd = 2, col="red", robust=TRUE,  level=0.95,...)

       })

ここに画像の説明を入力してください

于 2013-02-25T21:33:50.803 に答える
3

stat_ellipse() ここ(およびここ)で関数を見つけたところ、これを美しく処理します。

g + geom_point(alpha=I(1/10))  +
  stat_ellipse(aes(group=id), color="black")

もちろん、異なるデータセット:

于 2013-02-26T00:34:52.543 に答える
2

ggplot2ライブラリについては何も知りませんが、plotrixを使用して楕円を描くことができます。このプロットはあなたが求めているもののように見えますか?

library(plotrix)
n=10
d <- data.frame(x=runif(n,0,2),y=runif(n,0,2),seX=runif(n,0,0.1),seY=runif(n,0,0.1))
plot(d$x,d$y,pch=16,ylim=c(0,2),xlim=c(0,2))
draw.ellipse(d$x,d$y,d$seX,d$seY)
于 2013-02-25T20:23:19.393 に答える