7

いくつかのデータを生成しましょう:

x <- -10*cos(seq(0, pi, length.out = 100))+1
y <- 10*seq(0, pi, length.out = 100)
xerr <- rep(2, 100)
yerr <- rep(2, 100)
dd <- as.data.frame(cbind(x, y, xerr, yerr))

ここでは、いくつかの点とそれらの誤差を座標にしてxいます (便宜上、それらを定数に設定しています)。これらの誤差を点の大きさで表現したいと思います。これは簡単に実行できます。yxerryerr

ggplot() + 
  geom_point(data = dd, aes(x, y, size = sqrt(xerr^2 + yerr^2)), colour = "gray") +
  geom_path(data = dd, aes(x, y), colour = "red", size = .5) +
  scale_size_identity() +
  theme_bw()

ここに画像の説明を入力

ただし、これらのポイントのサイズは、プロットのスケールとは関係のないスケールで定義されます。プロットのスケールに関連してポイントの寸法を調整する方法はありますか? 上記の例では、各ポイントの半径のサイズは 2.828 に等しく、現在のように 1 未満ではない必要があります。

4

1 に答える 1

7

1 つの方法は、エラーのサイズによって定義された軸を持つ楕円を明示的に描画することです。

x <- -10*cos(seq(0, pi, length.out = 10))+1
y <- 10*seq(0, pi, length.out = 10)
xerr <- runif(10, 1, 5)
yerr <- runif(10, 1, 5)
dd <- as.data.frame(cbind(x, y, xerr, yerr))
dd$frame <- factor(seq(1:10))

この目的のために、楕円を生成する関数を定義します。

ellipseFun <- function(center = c(0, 0), axes = c(1, 1), npoints = 101){
  tt <- seq(0,2*pi, length.out = npoints)
  xx <- center[1] + axes[1] * cos(tt)
  yy <- center[2] + axes[2] * sin(tt)
  return(data.frame(x = xx, y = yy))
}

次に、すべての楕円の行列を生成します。

ddEll <- data.frame()
for(k in levels(dd$frame)){
  ddEll <- rbind(ddEll, cbind(as.data.frame(with(dd[dd$frame == k,], ellipseFun(center = c(x, y), axes = c(xerr, yerr), npoints = 101))),frame = k))
}

最後に、それらをプロットできます。

library(ggplot2)
ggplot() + 
  geom_point(data = dd, aes(x, y)) +
  geom_polygon(data=ddEll, aes(x = x, y = y, group = frame), colour = "gray", fill = "red", alpha = .2) +
  scale_size_identity() +
  theme_bw() +
  xlim(c(-20, 20)) + 
  ylim(c(-5, 35)) +
  coord_fixed()

ここに画像の説明を入力

于 2014-03-19T18:22:26.563 に答える