Ma question est très similaire à Normalisation de l'axe des y dans les histogrammes dans R ggplot to proportion , sauf que j'ai deux groupes de données de taille différente, et je voudrais que chaque proportion soit relative à sa taille de groupe au lieu de la taille totale.
Pour le rendre plus clair, disons que j'ai deux ensembles de données dans une trame de données:
dataA<-rnorm(100,3,sd=2)
dataB<-rnorm(400,5,sd=3)
all<-data.frame(dataset=c(rep('A',length(dataA)),rep('B',length(dataB))),value=c(dataA,dataB))
Je peux tracer les deux distributions avec:
ggplot(all,aes(x=value,fill=dataset))+geom_histogram(alpha=0.5,position='identity',binwidth=0.5)
et au lieu de la fréquence sur l'axe Y je peux avoir la proportion avec:
ggplot(all,aes(x=value,fill=dataset))+geom_histogram(aes(y=..count../sum(..count..)),alpha=0.5,position='identity',binwidth=0.5)
Mais cela donne la proportion par rapport à la taille totale des données (500 points ici): est-il possible de l'avoir par rapport à chaque taille de groupe?
Mon objectif ici est de permettre de comparer visuellement la proportion de valeurs dans un bac donné entre A et B, indépendamment de leur taille respective. Les idées qui diffèrent de la mienne sont également les bienvenues!
Merci!
Comme ça? [édité sur la base des commentaires d'OP]
ggplot(all,aes(x=value,fill=dataset))+
geom_histogram(aes(y=0.5*..density..),
alpha=0.5,position='identity',binwidth=0.5)
L'utilisation de y=..density..
Met à l'échelle les histogrammes pour que la zone sous chacun soit 1, ou sum(binwidth*y)=1.
Par conséquent, vous utiliseriez y = binwidth*..density..
Pour que y représente la fraction du total dans chaque poubelle. Dans votre cas, binwidth=0.5
.
OMI, c'est un peu plus facile à interpréter:
ggplot(all,aes(x=value,fill=dataset))+
geom_histogram(aes(y=0.5*..density..),binwidth=0.5)+
facet_wrap(~dataset,nrow=2)