2013-06-05 16 views
12

Mam problem z wykonaniem histogramu w R. Problem polega na tym, że każę mu zrobić 5 pojemników, ale to sprawia, że ​​4 i mówię, aby zrobić 5, a robi to 8 z nich.Dokładna liczba binów w histogramie w 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") 

Wszelkie pomysły, jak to naprawić?

+2

Pliki pomocy dla funkcji 'R' są dość jednoznaczne, ale" dam ci do przeczytania je ostrożnie. Zawsze dobry pomysł, aby tam zacząć. –

Odpowiedz

16

użyć argumentu licz

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

Dzięki! Jest to również doskonałe rozwiązanie do porównywania dystrybucji częstotliwości lub plików PDF. –

8

Liczba całkowita określony jako argument do nclass stosuje się jako sugestia:

numer jest propozycja tylko

Alternatywnym rozwiązaniem jest cut swoją wektora do określonej liczby grupach wykreślić wynik:

plot(cut(data, breaks = 4)) 

enter image description here

2

Jeżeli nie sprzeciwiają się za pomocą czegoś innego niż grafik bazowych, zawsze istnieje sposób ggplot2 robienia rzeczy:

biblioteki (ggplot2)

dane < - data.frame (x = dane)

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

ggplot2 ma wielką dokumentację w: docs.ggplot2.org/current/

dla konkretnych przykładach histogramu: http://docs.ggplot2.org/current/geom_histogram.html

7

budynek na odpowiedź od Roba Hyndmanem:

Może bardziej ogólnym rozwiązaniem byłoby wprowadzenie przerw uwzględniających wartości minimun i maximun danych oraz liczbę przerw = liczba_baków + 1.

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

Lubię być dość dokładne o moich punktów danych:

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

ten powinien zautomatyzować proces z małego ręcznego wprowadzenia.