Da ich über die Mathematik last time I tried asking this verwirrt war, hier ist ein weiterer Versuch. Ich möchte ein Histogramm mit einer geglätteten Verteilungsanpassung kombinieren. Und ich möchte, dass die y-Achse in Prozent ist.Scale geom_density zu geom_bar mit Prozent auf y
Ich kann keine gute Weg finden, um dieses Ergebnis zu erhalten. Letztes Mal habe ich einen Weg gefunden, die geom_bar
auf den gleichen Maßstab wie geom_density
zu skalieren, aber das ist das Gegenteil von dem, was ich wollte.
Meine aktuellen Code erzeugt diese Ausgabe:
ggplot2::ggplot(iris, aes(Sepal.Length)) +
geom_bar(stat="bin", aes(y=..density..)) +
geom_density()
Die Dichte und die Bar y-Werte übereinstimmen, aber die Skalierung ist unsinnig. Ich will Prozent auf den y-Achsen, nicht gut, die Dichte.
Einige neue Versuche. Wir beginnen mit einem Balkendiagramm geändert Prozentsätze zu zeigen, statt zählt:
gg = ggplot2::ggplot(iris, aes(Sepal.Length)) +
geom_bar(aes(y = ..count../sum(..count..))) +
scale_y_continuous(name = "%", labels=scales::percent)
Dann versuchen wir, einen geom_density hinzufügen, dass es irgendwie richtig zu skalieren erhalten:
gg + geom_density()
gg + geom_density(aes(y=..count..))
gg + geom_density(aes(y=..scaled..))
gg + geom_density(aes(y=..density..))
Gleiche wie die erste.
gg + geom_density(aes(y = ..count../sum(..count..)))
gg + geom_density(aes(y = ..count../n))
scheint off-Faktor von etwa 10 zu sein ...
gg + geom_density(aes(y = ..count../n/10))
gleiche wie:
gg + geom_density(aes(y = ..density../10))
Aber Ad-hoc-Zahlen eingefügt scheint wie eine schlechte Idee.
Ein nützlicher Trick besteht darin, die berechneten Werte des Diagramms zu überprüfen. Diese werden normalerweise nicht im Objekt gespeichert, wenn eines gespeichert wird. Allerdings kann man verwenden:
gg_data = ggplot_build(gg + geom_density())
gg_data$data[[2]] %>% View
Da wir die Dichte wissen passen um x = 6 sollte etwa 0,04 (4%), können wir um für ggplot2 berechneten Werte suchen, die uns dorthin zu gelangen, und die einzige Was ich sehe, ist Dichte/10.
Wie bekomme ich geom_density
passen auf die gleiche y-Achse skalieren wie die modifizierte geom_bar
?
Bonus Frage: Warum sind die Gruppierungen der Bars unterschiedlich? Die aktuelle Funktion hat keine Leerzeichen zwischen Balken.
Der Kommentar, den Sie letzte Mal bekam das ist, dass Sie versuchen, auf der gleichen Kurve, die zwei Achsen verwenden immer noch gilt. Ich glaube, dass ggplot dies gerade erst unterstützt. Auch im neueren ggplot sind sie viel klarer über die Unterscheidung zwischen Histogrammen und Balkendiagrammen und Sie wollen wahrscheinlich ein Histogramm. Ich denke, das grundlegende Problem ist, dass Sie denken, dass eine Dichte ein Prozent ist, aber es ist nicht. Ich bin mir wirklich nicht sicher, warum du sagst, das erste sei unsinnig. – Elin
Ich möchte eine Y-Achse, die für die meisten Leser Sinn macht, nicht Dichte, die für die meisten Leser keinen Sinn macht. – Deleet