Wie verbessern Sie den Aspekt von ggplot Histogramme der log-Skalen und diskreten Werten
Ich versuche, um die übersichtlichkeit zu verbessern und Aspekt ein Histogramm von diskreten Werten, die ich brauche, um zu repräsentieren, mit einer log-Skala.
Bitte beachten Sie die folgenden MWE
set.seed(99)
data <- data.frame(dist = as.integer(rlnorm(1000, sdlog = 2)))
class(data$dist)
ggplot(data, aes(x=dist)) + geom_histogram()
produziert
dann
ggplot(data, aes(x=dist)) + geom_line() + scale_x_log10(breaks=c(1,2,3,4,5,10,100))
was wahrscheinlich noch schlimmer ist
da es nun den Eindruck, dass etwas fehlt zwischen "1" und "2", und auch ist nicht völlig klar, welche bar hat den Wert "1" (bar auf die Recht der Zecke) und die bar hat den Wert "2" (bar auf die Links der Zecke).
Ich verstehen, dass technisch ggplot bietet mit dem "richtigen" visual Antwort für eine log-Skala. Aber als Beobachter habe ich einige Probleme beim Verständnis haben.
Ist es möglich, etwas zu verbessern?
EDIT:
Diese was passiert, wenn ich angewendet, Jaap Lösung zu meinem realen Daten
Wo sind die dips zwischen x=0 und x=1 ist, und zwischen x=1 und x=2 gekommen? Meine Wert sind diskrete, aber warum dann auch die Story mapping x=1.5 und x=2.5?
- Dies mag trivial sein, aber versuchen Abnehmender Anzahl der Plätze ??
- Das macht nicht wirklich helfen, meiner Meinung nach. Siehe das Beispiel in meiner Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die erste Sache, die kommt sich zu kümmern, ist das spielen mit den
binwidth
. Aber das bedeutet nicht, geben eine ausgezeichnete Lösung, entweder:gibt:
In diesem Fall ist es wahrscheinlich besser, verwenden Sie einen density-plot. Jedoch, wenn Sie
scale_x_log10
erhalten Sie eine Warnmeldung (Removed 524 rows containing non-finite values (stat_density)
). Dies kann gelöst werden, indem Sie eine log plus eine transformation.Folgenden code:
geben dieses Ergebnis:
dput
der Daten (oder eine ausreichend große Stichprobe von Daten) benutzt Ihr? Ohne, dass es ziemlich schwer zu sagen, was die genaue Ursache für dieses Verhalten ist.Frage ich mich, was wäre, wenn die y-Achse ist skaliert anstatt der x-Achse. Es werden Ergebnisse in wenigen Warnungen, wo die Werte sind "0", kann aber dienen Ihrem Zweck.
Außerdem können Sie anzeigen lassen möchten Frequenzen als Datenbeschriftungen, da vielleicht die Leute ignorieren die y-Skala und es dauert einige Zeit, zu erkennen, dass die y-Skala ist logarithmisch.
Eine Lösung könnte sein, konvertieren Sie Ihre Daten auf einem Faktor:
Resultieren in:
ggplot
Funktion:ggplot(data, aes(x=factor(dist))) + geom_histogram()