2017-10-09 33 views
1

ggridgesパッケージ(ggplot2に基づく)を使用してjoyplotを作成しようとしています。一般的な考え方は、ジョイプロットがきれいにスケーリングされたスタック密度プロットを作成することです。しかし、私は重み付け密度を使ってこれらの1つを生成することはできません。ジョイプロット作成時の密度の計算にサンプリング加重(加重密度)を組み込む方法はありますか?R:加重ジョイプロット/リッジプロット/密度プロット?

パッケージのドキュメントへのリンクは次のとおりです。https://cran.r-project.org/web/packages/ggridges/ggridges.pdf ggplotには追加の審美性を受け入れることができるパッケージがたくさんありますが、このタイプのgeomにウェイトを追加する方法はわかりません。

さらに、ggplotの重み付けされていないjoyplotの例を次に示します。私は、これを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) 
+0

サンプル入力データで[再現可能な例](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を提供すると、助けが簡単になります。 – MrFlick

+0

再現可能な例を@MrFlickに追加 – user3614648

答えて

4

はデフォルトstat_density_ridgesではなくstat_densityを使用することです。デフォルトstat_density_ridgesは、すべてのデータセット全体での共同密度 推定を行うこと

注:あなたがにリンクされているドキュメントあたり。ファセットプロットを使用すると、結果として希望の結果が生成されない可能性があります( )。代わりに stat = "density"stat_densityを使用するように設定することもできます。この場合は、 に美的マッピングheight = ..density..(例を参照)を追加する必要があります。

幸い、(stat_density_ridgesとは違って)stat_densityは美的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によって生成されます。

注:それはあなたがstat_densityを使用する場合、x軸の範囲は少し異なる振る舞いことが表示されます:それは、データ範囲の密度プロットをトリミングし、見栄えの良い尾をドロップします。手動でx軸を拡大することで簡単に修正できますが、言及する価値はあると思いました。

+0

これは非常に役に立ちます。ありがとうございます!あなたはこれがどのように動作するかを例で示すことができますか? – aeongrail

関連する問題