4

いくつかの円形データのバラ図を描きたいです。私はこのパッケージを使用してきましたが、circularこのパッケージ内で、次の関数を使用して簡単なバラの図を描くことができますrose.diag。これが図を描いている間、私はプロットを改善できるようにしたいのですが、プロットに追加したり、少し調整したりするために離れることができません。私はそれを描くことを検討しましたggplot2が、これは私には明確ではないようで、このようなバラの図を描くRで別のパッケージを見つけるのに苦労しています。

データのサンプルと現在のコードをクエリと一緒に以下に投稿します。

Angle
0.65454759
0.01355458
0.5052027
0.2264302
-0.350552
-0.428481
0.1231778
0.258787
0.06723504
0.06906181
2.54608572
-1.6591672
3.00437314
-0.0503291
-0.828578
-1.9616418
-0.6468774
0.01438686
0.1162713
0.9938797
0.1861583
0.1547071
0.2577813
0.5110576
0.08714113

これらのデータはラジアン回転角度です。パッケージを使用して、circularこのデータをクラスのベクトルにしますcircular

x <- circular(Angle)

次に、次のコードを使用してバラの図を描きます。図はラジアンではなく度でプロットされます。

rose.diag(x, pch = 16, cex = 1, axes = TRUE, shrink = 1, col=3, prop = 2, 
    bins=36, upper=TRUE, ticks=TRUE, units="degrees")

このプロットに追加したいことが3つあります。

  1. 0が右側ではなく上部になるように、プロットの向きを変更します。
  2. 各「ビン」のサイズと重量を視覚的に解釈できるように、同心円をプロットに追加します。
  3. 平均角度を識別するための線を追加します(可能な場合はsdエラーバーを使用)
4

1 に答える 1

3

これを行うにはいくつかの方法があります。rose.diagこのパッケージには「ゼロ」引数があります。

y <- scan() # paste in the values from the question and hit return twice
y <- circlar(y) # not necessary but prevents a warning
rose.diag(y, units = 'degrees', zero = pi/2) # units doesn't change the underlying units

circularまたは、作成したオブジェクトのプロパティを設定することもできます。

y <- circlar(y, zero = pi/2)
rose.diag(y, units = 'degrees') # note, no 0 call here

だから、今プロットは回転しています...ものを追加する方法...

> par('usr')
[1] -1.376553  1.376553 -1.123200  1.123200

これにより、ユーザー座標が得られ、ユーザー空間のプロット寸法がわかります。これで、円を追加するなどのことができます。

symbols(0, 0, circle = 0.2, inches = FALSE, add = TRUE, fg = 'red')

機能はありますが、lines.circular使い方がわかりませんでした。segmentsまたはarrowsコマンドを使用して線をプロットし、それらを使用してプロットに直接描画することもできます。線の角度と長さを点に変換するには、少しユークリッド幾何学が必要です。これですべて開始できます。

m <- mean.circle(y)
segments(0, 0, cos(m+pi/2), sin(m+pi/2), col = 'red') # note I need to add the new 0 position... there is a lines.circular function but it wasn't obvious to me how to use it.

(ヒント...のフレーミング円は半径1にあるので、の引数にrose.diagそれを与えると、そのポイントで正確に描画されます)circlesymbols

于 2012-11-17T12:02:55.110 に答える