2013-10-16 6 views
6

のは、いくつかのデータを生成してみましょう。ここではポイントサイズをggplot2のプロットのスケールに合わせるにはどうすればいいですか?

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

は、私は(私は定数それらを設定している便宜のために)自分のエラー、xerryerrでいくつかのポイントのxy座標を持っています。これらの誤差を点の大きさで表現したいと思います。これは簡単になんとかです:

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

enter image description here

しかし、これらの点の大きさは、プロットのスケールとは関係のない規模で定義されています。プロットのスケールに関連してポイントの次元を調整する方法はありますか?上記の例では、各点の半径は2.828に等しく、現在は1以上でなければなりません。

+0

Rプロットのポイントの「サイズ」は、通常、xまたはyスケールのいずれによっても決定されないデフォルトサイズに対する比率として設定されます。この場合、実際にポイントが2.8単位(半径または直径?)になるようにしますか?その場合は、サイズの引数に、希望のスプレッドを近似するのに十分な量、おそらくは10の倍数を乗算します。 –

+0

[scale_size](http://docs.ggplot2.org/current/scale_size.html)を使用してあなたが確立したスケール(通常はあなたのdfの中の連続的な変数またはカテゴリ変数)に相対的なシンボルのサイズを設定します。ピクセル精度とチャートの実際の出力サイズへの拡大については、それは面倒です。 : –

+0

@DWinこれは単なる例であり、私のデータのエラーはその値よりも小さいです。 – VLC

答えて

6

エラーのサイズで定義された軸を使用して、省略記号を明示的に描画する方法もあります。この目的のために

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

enter image description here

+0

これは絶対的な宝石です!これを使っている人は、あなたの 'y lim() 'と' xlim() 'でエラーの楕円を過ぎると、完全に描画されていないポリゴンがいくつか表示されます。 – James

関連する問題