16

ヒストグラムを作成するためにggplot2を使用しています:

geom_histogram(aes(x=...), y="..ncount../sum(..ncount..)")

エラーが発生します:

Mapping a variable to y and also using stat="bin".
  With stat="bin", it will attempt to set the y value to the count of cases in each group.
  This can result in unexpected behavior and will not be allowed in a future version of ggplot2.
  If you want y to represent counts of cases, use stat="bin" and don't map a variable to y.
  If you want y to represent values in the data, use stat="identity".
  See ?geom_bar for examples. (Deprecated; last used in version 0.9.2)

一般的にこれを引き起こす原因は何ですか?変数をyにマッピングしておらず、ヒストグラムを作成しているだけxで、ヒストグラムバーの高さがデータの正規化された部分を表すようにしたいので、エラーについて混乱しています(すべてのバーの高さの合計が100%になるように)データ。)

編集geom_density:の代わりに密度プロットを作成したい場合は、またはgeom_histogramを使用します..ncount../sum(..ncount..)..scaled..?何をするのかわかり..scaled..ません。

4

2 に答える 2

41

ここでの混乱は、すべてが。で始まる長年の混乱です(詳細な警告メッセージによって証明されます)stat_bin

ただし、ユーザーは通常、またはのいずれかstat_binを使用しているときに問題が発生するため、混乱がを中心に展開していることに気づきません。それぞれのドキュメントに注意してください。どちらもデフォルトで使用されます(現在のggplot2バージョンでは、この統計は連続データと離散データに分割されています)。geom_bargeom_histogramstat = "bin"stat_binstat_count

しかし、バックアップしましょう。geom_*は、データをある種の幾何学的形式に実際にレンダリングすることを制御します。stat_*は単にデータを変換するだけです。stat_bin意志のレイヤーを追加すると、デフォルトで呼び出され、学習しているときとgeom_bar見分けがつかないように見える可能性があるため、この区別は実際には少し混乱します。geom_bar

いずれにせよ、「棒」のようなgeomのヒストグラムと棒グラフを検討してください。どちらも明らかに、データのビニングをどこかで行うことになります。しかし、私たちのデータは事前​​に要約されているかどうかはわかりません。たとえば、次の棒グラフが必要になる場合があります。

x
a
a
a
b
b
b

または同等に

x  y
a  3
b  3

最初のものはまだビニングされていません。2番目は事前にバインドされています。geom_bar両方のデフォルトの動作は、データを事前にビニングしていないgeom_histogramことを前提としています。したがって、彼らはあなたの値を(ヒストグラムの場合、現在は棒グラフの場合)呼び出そうとします。stat_binstat_countx

警告が示すように、それはyあなたのために結果のカウントにマップしようとします。他の変数に自分自身をマップしようとするとy Here ThereBeDragonsの領域になります。(など)yによって返される変数の関数へのマッピングは問題なく、その警告をスローしないようにする必要があります(上記の@mnelの例を使用した場合はそうではありません)。stat_bin..count..

ここでgeom_barのポイントは、バーの高さを事前に計算している場合は、常にを使用することを忘れないでくださいstat = "identity"。または、デフォルトで使用する新しいgeom_colものを使用することをお勧めstat = "identity"します。ビンを事前に計算している可能性は非常に低いため、ほとんどの場合、から返されたもの以外のものgeom_histogramにマップしないことを覚えておく必要があります。ystat_bin

geom_dotplot独自のビニング統計を使用しstat_bindotます。この説明はここでも当てはまると思います。1dの場合のビン化された変数に類似した変数で利用できる柔軟性があまりなかったため、この種のことは一般に2dのビニングの場合(geom_bin2dおよび)では問題になりませんでした。将来の更新で2Dビニングの場合のより凝った操作が可能になり始めた場合、これはあなたがそこで注意しなければならないものになると思います。geom_hexzy

于 2013-03-27T03:43:08.280 に答える
8

のドキュメントには、およびgeom_histogramのエイリアスであると記載されていますstat_bingeom_bar

geom_densityを使用して生成された滑らかな密度推定を使用する状態のドキュメントstat_density

リンクをたどる(またはヘルプページを直接見つける)

stat_bin

のドキュメントでは、次の(追加の)列を持つdata.frameを返すstat_bin方法について説明しています。stat_bin

ビン内のポイント数を数える

密度 ビン内のポイントの密度、1に統合するようにスケーリング

ncount カウント、最大1にスケーリング

ndensity 密度、最大1にスケーリング

stat_density

のドキュメントでは、次の(追加の)列を持つdata.frameを返すstat_density方法について説明しています。stat_density

密度 密度推定

カウント 密度*ポイント数-積み重ねられた密度プロットに役立ちます

スケーリングされ た密度推定、最大1にスケーリング


..ndensity..同じ縮尺でプロットを作成するには、両方から、または両方からstat_bin、または両方..scaled..から必要なように見えますstat_density..density..

ggplot(dd, aes(x=x)) + 
  geom_histogram(aes(y= ..density..)) +  
  geom_density(aes(y=..density..))


ggplot(dd, aes(x=x)) + 
  geom_histogram(aes(y= ..ndensity..)) + 
  geom_density(aes(y=..scaled..))
于 2013-03-27T03:43:53.713 に答える