2016-07-11 30 views
1

Ich habe Daten von 2 Populationen. Ich möchte das Histogramm und Dichtediagramm von beiden auf der gleichen Grafik erhalten. Mit einer Farbe für eine Population und einer anderen Farbe für die andere.R: Dichtediagramm mit Farben nach Gruppe?

Ich habe dieses (Beispiel) versucht:

library(ggplot2) 
AA <- rnorm(100000, 70,20) 
BB <- rnorm(100000,120,20) 

valores <- c(AA,BB) 
grupo <- c(rep("AA", 100000),c(rep("BB", 100000))) 
todo <- data.frame(valores, grupo) 


ggplot(todo, aes(x=valores, fill=grupo, color=grupo)) + 
    geom_histogram(aes(y=..density..), binwidth=3)+ geom_density(aes(color=grupo)) 

Aber ich bin nur eine Grafik mit einer einzigen Zeile und einer einzigen Farbe zu bekommen. enter image description here

Ich hätte gerne verschiedene Farben für die zwei Dichte Linien. Und wenn möglich auch die Histogramme.

Ich habe es mit ggplot2 getan, aber Basis R wäre auch in Ordnung.

oder ich weiß nicht, was ich geändert habe und jetzt bekomme ich diese:

ggplot(todo, aes(x=valores, fill=grupo, color=grupo)) + 
geom_histogram(position="identity", binwidth=3, alpha=0.5)+ 
geom_density(aes(color=grupo)) 

aber die Dichte Linien nicht gezeichnet wurden. enter image description here

oder gar seltsame Dinge wie enter image description here

Antwort

2

Ich schlage vor, diese ggplot2 Lösung:

ggplot(todo, aes(valores, color=grupo)) + 
    geom_histogram(position="identity", binwidth=3, aes(y=..density.., fill=grupo), alpha=0.5) + 
    geom_density() 

enter image description here

@skan: Der Versuch der Nähe war, aber sie aufgetragen, um die Frequenzen statt Dichtewerte in dem Histogramm.

+0

Wie sieht es aus mit dem Histogramm mit Alpha, wie meine zweite Handlung aber auch mit den überlagerten Linien? – skan

+0

Danke. Ich bin immer verwirrt, wo das aes() Argument, innerhalb von ggplot oder innerhalb der anderen Begriffe zu platzieren ist. Nun, wie kann ich dickere Dichtelinien bekommen? – skan

+0

Und die letzte Sache, wenn ich ein Diagramm mit der stat_function hinzufügen möchte (fun = dnorm .....), um Informationen über die normale Verteilung der Mittel hinzuzufügen .... Wie schaffen Sie es, die richtige y-Skalierung zu bekommen ? – skan

1

A R Lösung Basis könnte sein:

hist(AA, probability = T, col = rgb(1,0,0,0.5), border = rgb(1,0,0,1), 
     xlim=range(AA,BB), breaks= 50, ylim=c(0,0.025), main="AA and BB", xlab = "") 
    hist(BB, probability = T, col = rgb(0,0,1,0.5), border = rgb(0,0,1,1), add=T) 
    lines(density(AA)) 
    lines(density(BB), lty=2) 

Für alpha verwendete ich rgb. Aber es gibt mehrere Möglichkeiten, um es zu bekommen. Siehe alpha() in der scales Paket zum Beispiel. Ich fügte auch den Breaks-Parameter für die Darstellung der AAs hinzu, um die Binwidth im Vergleich zur BB-Gruppe zu erhöhen.

enter image description here

+0

Was ist mit dem Sehen des Histogramms mit Alpha, wie meine zweite Handlung aber auch mit den überlagerten Linien? – skan

+1

@skan sehe meine Bearbeitungen. – Jimbou