Question

Je veux créer le prochain tracé de densité d'histogramme avec ggplot2.De la manière "normale" (packages de base), c'est vraiment simple :

set.seed(46)
vector <- rnorm(500)  
breaks <- quantile(vector,seq(0,1,by=0.1))
labels = 1:(length(breaks)-1)
den = density(vector)
hist(df$vector,
     breaks=breaks,
     col=rainbow(length(breaks)),
     probability=TRUE)
lines(den)

enter image description here

Avec ggplot, j'ai atteint ceci jusqu'à présent :

seg <- cut(vector,breaks,
           labels=labels,
           include.lowest = TRUE, right = TRUE)
df = data.frame(vector=vector,seg=seg)

ggplot(df) + 
     geom_histogram(breaks=breaks,
                    aes(x=vector,
                        y=..density..,
                        fill=seg)) + 
     geom_density(aes(x=vector,
                      y=..density..))

Mais l’échelle « y » n’a pas la bonne dimension.J'ai remarqué que la prochaine exécution donne la bonne échelle "y".

 ggplot(df) + 
     geom_histogram(breaks=breaks,
                    aes(x=vector,
                    y=..density..,
                    fill=seg)) + 
     geom_density(aes(x=vector,
                      y=..density..))

Je ne comprends tout simplement pas. y=..density.. est là, ça devrait être la hauteur.Alors pourquoi diable ma balance se modifie-t-elle lorsque j'essaie de la remplir ?

J'ai besoin des couleurs.Je veux juste un histogramme où les sauts et les couleurs de chaque bloc sont définis de manière directionnelle en fonction des couleurs de remplissage ggplot par défaut.

Était-ce utile?

La solution

Manuellement, j'ai ajouté des couleurs à vos barres de centiles.Voyez si cela fonctionne pour vous.

library(ggplot2)

ggplot(df, aes(x=vector)) +   
   geom_histogram(breaks=breaks,aes(y=..density..),colour="black",fill=c("red","orange","yellow","lightgreen","green","darkgreen","blue","darkblue","purple","pink")) + 
   geom_density(aes(y=..density..)) +
   scale_x_continuous(breaks=c(-3,-2,-1,0,1,2,3)) +
   ylab("Density") + xlab("df$vector") + ggtitle("Histogram of df$vector") +
   theme_bw() + theme(plot.title=element_text(size=20),
                      axis.title.y=element_text(size = 16, vjust=+0.2),
                      axis.title.x=element_text(size = 16, vjust=-0.2),
                      axis.text.y=element_text(size = 14),
                      axis.text.x=element_text(size = 14),
                      panel.grid.major = element_blank(),
                      panel.grid.minor = element_blank())

enter image description here

Autres conseils

fill=seg aboutit à un regroupement.Vous obtenez en fait un histogramme différent pour chaque valeur de seg.Si vous n'avez pas besoin des couleurs, vous pouvez utiliser ceci :

ggplot(df) + 
  geom_histogram(breaks=breaks,aes(x=vector,y=..density..), position="identity") + 
  geom_density(aes(x=vector,y=..density..))

enter image description here

Si vous avez besoin des couleurs, il peut être plus simple de calculer les valeurs de densité en dehors de ggplot2.

La confusion quant à l'interprétation du y-axis cela pourrait être dû au fait que la densité est tracée plutôt que le nombre.Ainsi, les valeurs sur le y-axis sont des proportions de l’échantillon total, où le la somme des barres est égale à 1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top