2013-05-02 6 views
-2

J'ai un histogramme ci-dessous, et j'ai ajouté 2 graphiques de densité. Il correspond aux 2 classes qui composent les données. Je souhaite ajouter un 2ème axe y sur la droite, mais ayant la même hauteur que le premier axe y, de sorte que la hauteur des tracés de densité ne semble pas si petite. Les hauteurs relatives des 2 parcelles de densité doivent directement comparables, de sorte que leur superficie totale est de 1Comment ajouter un 2ème axe Y pour un graphe de densité superposé à un histogramme dans R?

+3

Diminution de la valeur pour aucun code et pas de données. –

+0

Vous pouvez utiliser 'doubleYScale' à partir du paquet 'latticeExtra'. Voir ce [link] (http://latticeextra.r-forge.r-project.org/#doubleYScale&theme=default) pour plus d'informations. – fdetsch

Répondre

1
z <- rnorm(100,.3,.2) 
hist(z, xlab="", ylab="", main="", yaxt="n") 
par(new=TRUE) 
plot(density(z), xlab="", ylab="", main="", xaxt="n", yaxt="n") 
axis(2, ...) # plug in the relevant values for `at` and `labels` 
axis(4, ...) # plug in the relevant values for `at` and `labels` 
+0

Merci pour votre réponse! Y a-t-il un moyen pour moi de rendre directement comparables les hauteurs relatives des parcelles de densité? Rappelez-vous que j'ai 2 graphiques de densité ici pour les 2 classes de données qui composent l'histogramme. De même, comment puis-je connaître les valeurs de densité, c'est-à-dire, quelle devrait être la valeur du 2ème axe des y? – Cheng

+0

Vous pouvez faire quelque chose comme 'max (densité (z) $ y)' pour obtenir une limite supérieure pour chaque densité, puis spécifier les axes en conséquence. Pour deux densités, vous devez évidemment le faire séparément pour chacune et répéter simplement le bit 'plot (densité (z), ...)' pour la deuxième densité. – Thomas

2

Si vous utilisez ggplot2 vous pouvez utiliser geom_density(aes(y=..scaled..)) et geom_histogram(aes(y = ..ndensity)) à l'échelle de la même

par exemple

x <- rnorm(400, 10, 5) 
y <- rnorm(400, -10, 5) 
dd <- rbind(data.frame(value = x, id = 'x'), data.frame(value = y, id = 'y')) 
ggplot(dd, aes(x=value)) + 
    geom_histogram(aes(y=..ndensity..)) + 
    geom_density(aes(colour = id, y = ..scaled..)) 

enter image description here

+0

Merci pour votre réponse! J'ai fait une erreur dans ma question initiale. La superficie totale des parcelles à 2 densités devrait être égale à 1, de sorte qu'elles soient directement comparables. Puisque l'histogramme montre l'ensemble des données, mais les graphiques à 2 densités montrent les données pour 1 classe, leur hauteur devrait probablement être plus petite aussi. Dans votre parcelle, je vois seulement 1 axe. Je veux un 2ème axe y sur la droite montrant la densité. – Cheng

Questions connexes