2013-06-05 27 views
12

Ich habe Probleme, ein Histogramm in R zu machen. Das Problem ist, dass ich sage, dass es 5 Bins machen soll, aber es macht 4 und ich sage 5 und es macht 8 von ihnen.Genaue Anzahl von Bins im Histogramm in R

data <- c(5.28, 14.64, 37.25, 78.9, 44.92, 8.96, 19.22, 34.81, 33.89, 24.28, 6.5, 4.32, 2.77, 17.6, 33.26, 52.78, 5.98, 22.48, 20.11, 65.74, 35.73, 56.95, 30.61, 29.82); 

hist(data, nclass = 5,freq=FALSE,col="orange",main="Histogram",xlab="x",ylab="f(x)",yaxs="i",xaxs="i") 

Irgendwelche Ideen, wie man es beheben kann?

+2

Die Hilfedateien für 'R'-Funktionen sind ziemlich explizit, aber ich werde ihnen erlauben, sie sorgfältig zu lesen. Immer eine gute Idee, dort anzufangen. –

Antwort

16

Verwenden Sie die Pausen Argument:

hist(data, breaks=seq(0,80,l=6), 
     freq=FALSE,col="orange",main="Histogram", 
     xlab="x",ylab="f(x)",yaxs="i",xaxs="i") 

enter image description here

+0

Danke! Dies ist auch ideal für den Vergleich von Häufigkeitsverteilungen oder PDFs. –

8

Die ganze Zahl als Argument angegeben für nclass wird als Vorschlag verwendet:

die Zahl ist ein Vorschlag nur

Eine alternative Lösung ist der Vektor in eine festgelegte Anzahl von Gruppen cut und plotten das Ergebnis:

plot(cut(data, breaks = 4)) 

enter image description here

2

Wenn Sie nicht auf die Verwendung etwas anderes als Basis Grafiken entgegengesetzt sind, gibt es immer die ggplot2 Art und Weise, Dinge zu tun ist:

Bibliothek (ggplot2)

Daten < - data.frame (x = Daten)

ggplot(data, aes(x=x))+ 
     geom_histogram(binwidth=18,color="black", fill="grey")+ 
     scale_x_continuous(breaks=c(0,20,40,60,80) 

ggplot2 hat große Dokumentation bei: docs.ggplot2.org/current/

Für spezifische Beispiele Histogramm: http://docs.ggplot2.org/current/geom_histogram.html

7

Aufbauend auf die Antwort von Rob Hyndman:

Vielleicht ein Eine allgemeinere Lösung wäre, die Unterbrechungen unter Berücksichtigung der minimalen und maximalen Werte der Daten und der Anzahl der Unterbrechungen = Anzahl der Bins + 1 zu machen.

hist(data,breaks=seq(min(data),max(data),l=number_of_bins+1), 
    freq=FALSE,col="orange", 
    main="Histogram",xlab="x",ylab="f(x)",yaxs="i",xaxs="i") 
1

Ich mag über meine Datenpunkte ganz genau sein:

hist(data,breaks = seq(min(data),max(data),by=((max(data) - min(data))/(length(data)-1)))) 

Dies sollte den Prozess mit wenig manuellen Eingabe automatisieren.