2017-11-16 6 views
0

Mein Problem ist, dass, wenn ich Histogramme mit ggplot2 einer bestimmten bin Breite größer als die Auflösung der Daten erstellen, Bins manchmal ungerade Anzahl von Inkrementen von den zugrunde liegenden Daten enthalten. Dies führt zu großen Peaks im Histogramm, die einen falschen Eindruck davon liefern, wie hoch die Daten sind. Gibt es eine eingebaute Möglichkeit, dies zu verhindern? Vielleicht Zwischenschritte zwischen den Behältern zuweisen?R ggplot2 Histogramm bin Zuweisung

require(ggplot2) 
require(ggplot2movies) 
m <- ggplot(movies, aes(x = rating)) 
#Original resolution 
plot(m + geom_histogram(binwidth = 0.1) + scale_y_sqrt()) 
#Downsampled 
plot(m + geom_histogram(binwidth = 0.25) + scale_y_sqrt()) 

Original Resolution

Downsampled

+3

Ich verstehe nicht, was Sie verhindern möchten. Ich meine, Sie geben eine bestimmte Behälterbreite an, und das Diagramm zeigt die Zähler für diese Behälter an. Sie sollten nur eine für Ihre Daten geeignete Behälterbreite wählen. Und ehrlich gesagt, das ist kein gelöstes Problem. In der Basisfunktion 'hist()' sind verschiedene Algorithmen implementiert. Es ist Peaky, weil Histogramme für kontinuierliche Zufallsvariablen gedacht sind und Sie grundsätzlich diskrete Werte haben. Es zeigt, dass Ihre Daten eine Struktur haben, die meiner Meinung nach wahrheitsgemäßer ist. – MrFlick

+1

Für die Algorithmen, die die Basis 'hist' verwendet, siehe'? Nclass' - Sie könnten eine der drei Optionen verwenden, um die Gesamtzahl der Klassen zu bestimmen, aber sie basieren alle auf dem Datenbereich, nicht auf der Auflösung. Beachten Sie auch, dass die Datenauflösung möglicherweise nicht konstant über den Bereich ist. – Gregor

+0

@MrFlick Es ist für eine glänzende App, in der die Anzahl der Behälter einstellbar ist, um den Vergleich mit anderen Datensätzen zu erleichtern. Offensichtlich sind bestimmte Vielfache der Auflösung am sinnvollsten als eine Bin-Breite, und vielleicht könnte ich die Werte auf diese Teilmenge beschränken, aber ich würde wirklich gerne etwas Sinnvolles für Zwischenwerte zeichnen. – Matt

Antwort

0

Abhilfe für jetzt ist einfach zu Ändern Sie die binwidth als eine Funktion der Datenauflösung im Gegensatz zur Anzahl der Bins.

+1

Die "Peaking" wird durch die Mitte der Balken sowie die Breite des Fachs beeinflusst, es kann mit "center =" eingestellt werden. – jtr13

1

Ich weiß nicht, ob es eine eingebaute Möglichkeit, oder nicht, geom_histogram() hat einen Standardwert von 30 Bins, die Sie überschreiben können. Eine mögliche soltution kann, wenn man die Anzahl der verschiedenen x-Werten zählen und die in der Anzahl der Bins (oder einen Teil von ihnen):

plot(m + geom_histogram(bins = nlevels(as.factor(movies$rating)))) 

enter image description here