2017-10-09 2 views
1

J'essaye de créer un joyplot en utilisant le paquet ggridges (basé sur ggplot2). L'idée générale est qu'un joyplot crée des tracés de densité empilés bien échelonnés. Cependant, je ne peux pas sembler en produire un en utilisant la densité pondérée. Existe-t-il un moyen d'incorporer des poids d'échantillonnage (pour la densité pondérée) dans le calcul des densités dans la création d'un joyplot?R: Joyplot pondéré/Ridgeplot/Densité Terrain?

Voici un lien vers la documentation du package ggridges: https://cran.r-project.org/web/packages/ggridges/ggridges.pdf Je sais beaucoup de paquets sur la base ggplot peut accepter l'esthétique supplémentaire, mais je ne sais pas comment ajouter des poids à ce type de geom.

De plus, voici un exemple de joyplot non pondéré dans ggplot. J'essaie de convertir cela en un graphique pondéré avec la densité pondérée selon 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

Il est plus facile de vous aider si vous fournissez un [exemple reproductible] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) avec des exemples de données d'entrée. – MrFlick

+0

Ajout d'un exemple reproductible, par @MrFlick – user3614648

Répondre

4

Il semble que la façon de faire est d'utiliser stat_density plutôt que la valeur par défaut stat_density_ridges. Selon les documents que vous avez lié à:

Notez que l'estimation par défaut stat_density_ridges rend densité commune dans tous les ensembles de données. Cela peut ne pas générer le résultat souhaité en utilisant des tracés à facettes. Comme alternative, vous pouvez définir stat = "density" pour utiliser stat_density. Dans ce cas, il faut pour ajouter le mappage esthétique height = ..density.. (voir les exemples).

Heureusement, stat_density (contrairement stat_density_ridges) comprend l'weight esthétique et passera à l'appel density sous-jacent. Vous vous retrouvez avec quelque chose comme:

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 

La variable ..density.. est automatiquement générée par stat_density.

Note: Il semble que lorsque vous utilisez stat_density la gamme axe x se comporte un peu différemment: il taillera la parcelle de densité à la plage de données et déposez les queues de belle apparence. Vous pouvez facilement corriger cela en augmentant manuellement votre axe des x, mais je pensais que cela valait la peine d'être mentionné.

+0

Ceci est très utile, merci! Êtes-vous capable de montrer comment cela fonctionne dans un exemple? – aeongrail