2

ggridgesパッケージ (に基づく)を使用してジョイプロットを作成しようとしていますggplot2。一般的な考え方は、ジョイプロットは適切にスケーリングされた積み重ねられた密度プロットを作成するというものです。ただし、加重密度を使用してこれらのいずれかを生成できないようです。ジョイプロットの作成で密度の計算に (加重密度の) サンプリング重みを組み込む方法はありますか?

ggridgesパッケージのドキュメントへのリンクは次のとおりです: https://cran.r-project.org/web/packages/ggridges/ggridges.pdfこのタイプのgeomオブジェクトに重みを追加する方法を知っています。

さらに、これは ggplot の重み付けされていないジョイプロットの例です。これを、pweight に従って重み付けされた密度を持つ重み付けされたプロットに変換しようとしています。

# Load package, set seed
library(ggplot)
set.seed(1)

# Create an example dataset
dat <- data.frame(group = c(rep("A",100), rep("B",100)),
                  pweight = runif(200),
                  val = runif(200))

# Create an example of an unweighted joyplot
ggplot(dat, aes(x = val, y = group)) + geom_density_ridges(scale= 0.95)
4

1 に答える 1

7

これを行う方法はstat_density、デフォルトではなく使用することのようですstat_density_ridges。リンク先のドキュメントによると:

デフォルトでstat_density_ridgesは、すべてのデータセットにわたって結合密度推定が行われることに注意してください。これは、ファセット プロットを使用する場合、目的の結果を生成しない場合があります。代わりに、 stat = "density"を使用するように設定できますstat_density。この場合、美的マッピングを追加する必要がありheight = ..density..ます (例を参照)。

幸いなことに、stat_density( とは異なりstat_density_ridges) は美学weightを理解し、それを基になるdensity呼び出しに渡します。あなたは次のようなものになります:

ggplot(dat, aes(x = val, y = group)) +
  geom_density_ridges(aes(height=..density..,  # Notice the additional
                          weight=pweight),     # aes mappings
                      scale= 0.95,
                      stat="density") # and use of stat_density

..density..変数は によって自動的に生成されますstat_density

注: x 軸の範囲を使用すると、少し異なる動作をするように見えますstat_density: 密度プロットをデータ範囲にトリミングし、見栄えの良いテールを削除します。これは、x 軸を手動で拡大することで簡単に修正できますが、言及する価値があると思いました。

于 2017-10-11T02:04:13.570 に答える