2011-12-22 5 views
1

特定の種類のバープロットを作成しようとしていますが、ggplot2またはRグラフィックスの専門家ではありません。各バーの高さは、以下の密度ベクトルに対応します。区切りと密度でバープロットを作成する

各バーのx軸ブレークは、ブレークベクトルで識別されます。 (密度の長さとブレークベクトルは常に同じです。)休憩は連続しています。ブレークポイント間の幅がすべてのブレークで同じであることを保証することができます(この例では、幅はすべての間隔で.2です)。

バーの高さが密度で、バーの幅と開始/終了がブレークベクトルによって決まるように、Rでこのグラフを作成するにはどうすればよいですか?

# density for each bar 
density = c(0, 2.43053372991266e-05, 0, 2.56155325481663e-05, 7.85928661230842e-05, 
6.65974683477407e-05, 0.000191167180262139, 0.000391190191728852, 
0.000773173013145194, 0.000994581155560843, 0.00186993240600829, 
0.00301523228215973, 0.0024027636820586, 0.00178958309972533, 
0.00197757576002083, 0.0037305807759235, 0.00751360121824956, 
0.0161785199339545, 0.0285084660871918, 0.0470377898959775, 0.0749650429960432, 
0.0995404136577645, 0.122970891515022, 0.137345727945268, 0.129721517357472, 
0.111609726931989, 0.0833285279873897, 0.0569221001742823, 0.034426013022441, 
0.0191745738000343, 0.00810133792335031, 0.00342022026994395, 
0.00120148435128416, 0.000598579482992183, 5.22199596137814e-05, 
5.23550471126253e-05, 0) 

# breaks for barplot 
breaks = c(-4.6, -4.4, -4.2, -4, -3.8, -3.6, -3.4, -3.2, -3, -2.8, -2.6, 
-2.4, -2.2, -2, -1.8, -1.6, -1.4, -1.2, -1, -0.8, -0.6, -0.399999999999999, 
-0.199999999999999, 0, 0.2, 0.4, 0.600000000000001, 0.800000000000001, 
1, 1.2, 1.4, 1.6, 1.8, 2, 2.2, 2.4, 2.6) 

説明すると、最初のバーの密度は0%です。バーの範囲は、-Inf〜-4.6に対応します。次のバーは2.43e-05の高さを有し、x軸はx軸上に-4.6から-4.4の範囲のバーを有する。第2のバーは高さが0であり、x軸はx軸上で-4.4〜-4.2の範囲のバー幅を有し、以下同様である。最後のバーは0%の密度を持ち、2.6から無限大までの範囲です。 (当然、0%密度の最初と最後の棒がプロットされないように、プロットオブジェクトのxlimを分割の最小値と最大値に設定します)。

答えて

3
ここ

はggplot2バージョンです:

df <- data.frame(
    xmin = breaks, 
    xmax = c(breaks[-1], Inf), 
    ymin = 0, 
    ymax = density) 

ggplot(df, aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax)) + 
    geom_rect(colour = "grey80") 

enter image description here

4

すべてとBarplot:

barplot(density, names.arg=breaks) 

そして、これが最初で最後のエントリを排除するであろう:

barplot(density[-c(1,length(density))], names.arg=breaks[-c(1,length(density))]) 

あなたがより1観測された密度が必要になり、あなたのデータと一致するように、あなたの説明のためのためにあなたのカットポイントベクトル。これは、時間間隔の文字ラベルの右ベクトルかもしれないもので、「密度」とプロットの両端を省略しますが、ラベルと値の登録を確認する必要があります:

opar <- par(mar=c(6, 4, 3, 2) + 0.1) 
str.breaks <- paste(format(breaks[-length(breaks)], scientific=3), 
           " to ", format(breaks[-1], scientific=3), sep="") 
barplot(density[-c(1,length(density))], names.arg=str.breaks[-1], las=2) 
par(opar) 

enter image description here

+0

こんにちは@Dwin、チャートを構築した後、私は次のコマンドを実行しますabline(V = 0、COL = "赤" )を簡単なテストとして使用します。垂直線は、-0~0/0~2のラベルの間ではなく、プロットの左端に表示されます。上のコードはラベルに名前を付けるだけで、 "改行"ベクトルに従ってビンの開始と終了の値を配置することはできませんか?ご協力ありがとうございました! –

+0

それは単なる可能ではありません。確かです。左辺のユーザー座標は1から始まります。棒グラフは、ラベルの値ではなく、その順序で索引付けされます。数字の 'breaks'変数を使用してインデックスを検索する場合は、 'findInterval'関数を使用します。 –

関連する問題