2013-06-05 13 views
12

Ho problemi a creare un istogramma in R. Il problema è che gli dico di creare 5 bin, ma fa 4 e dico di fare 5 e ne fa 8.Numero esatto di contenitori in Istogramma 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") 

Qualche idea su come risolverlo?

+2

I file di aiuto per le funzioni 'R' sono piuttosto espliciti, anche se garantisco che è necessario leggerli attentamente. È sempre una buona idea iniziare da lì. –

risposta

16

utilizzare l'argomento pause:

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

Grazie! Questo è anche ottimo per confrontare distribuzioni di frequenza o PDF. –

8

L'intero specificato come argomento per nclass è usato come un suggerimento:

il numero è un suggerimento solo

Una soluzione alternativa è quella di cut i vettori in un numero specificato di gruppi e tracciare il risultato:

plot(cut(data, breaks = 4)) 

enter image description here

2

Se non si oppongono ad usare qualcosa di diverso la grafica di base, c'è sempre il modo ggplot2 di fare le cose:

biblioteca (ggplot2)

dati < - data.frame (x = dati)

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

ggplot2 ha grande documentazione all'indirizzo: docs.ggplot2.org/current/

Per esempi specifici istogramma: http://docs.ggplot2.org/current/geom_histogram.html

7

Costruire sulla risposta da Rob Hyndman:

Forse un una soluzione più generica sarebbe quella di effettuare le interruzioni considerando i valori minimi e massimi dei dati e il numero di interruzioni = numero_di_bins + 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

mi piace essere abbastanza preciso sui miei punti di dati:

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

Questo dovrebbe automatizzare il processo con poco input manuale.

Problemi correlati