3

同じデータから 2 つ以上のヒストグラムをプロットしたいのですが、次のように 1 つのグループの座標を反転させます。

ここに画像の説明を入力

(注: この図は、Grossman et al 2011 から取得したものです。複数のシグナルの合成により、正の選択の領域における因果的バリアントが区別されます)

たとえば、ggplot2 からダイヤモンド データセットを取得してみましょう。

> library(ggplot2)
> head(diamonds)
  carat       cut color clarity depth table price    x    y    z
1  0.23     Ideal     E     SI2  61.5    55   326 3.95 3.98 2.43
2  0.21   Premium     E     SI1  59.8    61   326 3.89 3.84 2.31
3  0.23      Good     E     VS1  56.9    65   327 4.05 4.07 2.31
4  0.29   Premium     I     VS2  62.4    58   334 4.20 4.23 2.63
5  0.31      Good     J     SI2  63.3    58   335 4.34 4.35 2.75
6  0.24 Very Good     J    VVS2  62.8    57   336 3.94 3.96 2.48

私が試したアプローチの 1 つは、プロットせずに stat_bin を使用してヒストグラムを計算し、それによって返される counts 列の値を変更することでした。

> my_sb <-stat_bin(data=diamonds, mapping=aes(x=x)

stat_bin のドキュメントによると、この関数はマップされたものと等しい data.frame を返す必要がありますが、4 つの新しい列 (count、density、ncount、ndensity) が追加されます。ただし、これらの列はどこにも見つかりません。

# I supposed that this should contain a count, density columns, but it does not.
> print(head(my_sb$data))  
  carat       cut color clarity depth table price    x    y    z
1  0.23     Ideal     E     SI2  61.5    55   326 3.95 3.98 2.43
2  0.21   Premium     E     SI1  59.8    61   326 3.89 3.84 2.31
3  0.23      Good     E     VS1  56.9    65   327 4.05 4.07 2.31
4  0.29   Premium     I     VS2  62.4    58   334 4.20 4.23 2.63
5  0.31      Good     J     SI2  63.3    58   335 4.34 4.35 2.75
6  0.24 Very Good     J    VVS2  62.8    57   336 3.94 3.96 2.48

別の可能なアプローチは、scale_y_reverse() を使用することですが、それを単一のデータセットに適用する方法がわかりません。

私が考えることができる 3 番目のアプローチは、viewPorts を使用することですが、それを実装する方法についてはよくわかりません。

4

1 に答える 1

4

このように多分:

ggplot(data = diamonds) + 
    geom_histogram(aes(x = x,y = ..count..)) + 
    geom_histogram(aes(x = x,y = -..count..))

参考までに-過去にこれをどのように行ったかを正確に思い出せなかったので、「ggplot2反転ヒストグラム」をグーグルで検索し、最初のヒット、StackOverflowの質問をクリックしました。

返される proto オブジェクトがどのようにstat_bin構造化されているか正確にはわかりませんが、新しい変数はどこかにあります。これが機能する方法は、geom_histogramそれ自体がstat_binビニングを実行するために呼び出すため、計算された変数にアクセスできるため、y変数にマップできます。

于 2013-06-19T14:14:23.347 に答える