Je veux créer le prochain tracé de densité d'histogramme avec ggplot2
. De manière "normale" (packages de base) est vraiment facile:
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)
Avec ggplot, j'y suis parvenu 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" a la mauvaise dimension. J'ai noté que la prochaine exécution obtient 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 mon échelle se modifie quand j'essaye de la remplir?
J'ai besoin des couleurs. Je veux juste un histogramme où les coupures et les couleurs de chaque bloc sont définies directionnellement selon les couleurs de remplissage ggplot par défaut.
Manuellement, j'ai ajouté des couleurs à vos barres de centile. 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())
fill=seg
entraîne le 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..))
Si vous avez besoin des couleurs, il peut être plus facile de calculer les valeurs de densité en dehors de ggplot2.
La confusion concernant l'interprétation du y-axis
peut être dû à la densité plutôt qu'au nombre. Ainsi, les valeurs sur le y-axis
sont les proportions de l'échantillon total, où la la somme des barres est égale à 1
.