Superposition d'histogrammes avec ggplot2 dans R

Je suis nouveau sur R et j'essaie de tracer 3 histogrammes sur le même graphique. Tout a bien fonctionné, mais mon problème est que vous ne voyez pas où 2 histogrammes se chevauchent - ils ont l'air plutôt coupés: histogramme

Quand je fais des diagrammes de densité, cela semble parfait: chaque courbe est entourée d'une ligne de cadre noire, et les couleurs sont différentes où les courbes se chevauchent: densité

Quelqu'un peut-il me dire si quelque chose de similaire peut être réalisé avec les histogrammes de la 1ère image? C'est le code que j'utilise:

lowf0 <-read.csv (....)
mediumf0 <-read.csv (....)
highf0 <-read.csv(....)
lowf0$utt<-'low f0'
mediumf0$utt<-'medium f0'
highf0$utt<-'high f0'
histogram<-rbind(lowf0,mediumf0,highf0)
ggplot(histogram, aes(f0, fill = utt)) + geom_histogram(alpha = 0.2)

Merci d'avance pour tous les conseils utiles!

90
demandé sur Andrie 2011-08-05 18:02:24

2 réponses

Votre code actuel:

ggplot(histogram, aes(f0, fill = utt)) + geom_histogram(alpha = 0.2)

Dit à ggplot de construire un histogramme en utilisant toutes les valeurs de f0, puis de colorer les barres de cet histogramme unique en fonction de la variable utt.

Ce que vous voulez à la place est de créer trois histogrammes séparés, avec un mélange alpha afin qu'ils soient visibles l'un à travers l'autre. Donc, vous voulez probablement utiliser trois appels distincts à geom_histogram, où chacun obtient son propre cadre de données et remplit:

ggplot(histogram, aes(f0)) + 
    geom_histogram(data = lowf0, fill = "red", alpha = 0.2) + 
    geom_histogram(data = mediumf0, fill = "blue", alpha = 0.2) +
    geom_histogram(data = highf0, fill = "green", alpha = 0.2) +

Voici un béton exemple avec une sortie:

dat <- data.frame(xx = c(runif(100,20,50),runif(100,40,80),runif(100,0,30)),yy = rep(letters[1:3],each = 100))

ggplot(dat,aes(x=xx)) + 
    geom_histogram(data=subset(dat,yy == 'a'),fill = "red", alpha = 0.2) +
    geom_histogram(data=subset(dat,yy == 'b'),fill = "blue", alpha = 0.2) +
    geom_histogram(data=subset(dat,yy == 'c'),fill = "green", alpha = 0.2)

Qui produit quelque chose comme ceci:

entrez la description de l'image ici

Édité pour corriger les fautes de frappe; vous vouliez remplir, pas de couleur.

96
répondu joran 2011-08-05 14:26:36

En utilisant les exemples de données de @joran,

ggplot(dat, aes(x=xx, fill=yy)) + geom_histogram(alpha=0.2, position="identity")

Notez que la position par défaut de geom_histogram est " stack."

Voir "réglage de la position" de cette page:

Docs.ggplot2.org/current/geom_histogram.html

180
répondu kohske 2016-09-11 15:26:06