J'ai du mal à faire un histogramme en R. Le problème est que je lui dis de faire 5 bacs mais ça fait 4 et je dis de faire 5 et ça en fait 8.
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")
Des idées sur la façon de le réparer?
Utilisez l'argument breaks:
hist(data, breaks=seq(0,80,l=6),
freq=FALSE,col="orange",main="Histogram",
xlab="x",ylab="f(x)",yaxs="i",xaxs="i")
L'entier spécifié comme argument pour nclass
est utilisé comme suggestion:
le nombre n'est qu'une suggestion
Une autre solution consiste à cut
votre vecteur dans un nombre spécifié de groupes et à tracer le résultat:
plot(cut(data, breaks = 4))
S'appuyant sur la réponse de Rob Hyndman:
Une solution plus générique serait peut-être de faire les ruptures en considérant les valeurs minimun et maximun des données, et le nombre de ruptures = nombre_de_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")
J'aime être assez précis sur mes points de données:
hist(data,breaks = seq(min(data),max(data),by=((max(data) - min(data))/(length(data)-1))))
Cela devrait automatiser le processus avec peu de saisie manuelle.
Si vous n'êtes pas opposé à utiliser autre chose que des graphiques de base, il y a toujours la façon de faire ggplot2:
bibliothèque (ggplot2)
data <- data.frame (x = data)
ggplot(data, aes(x=x))+
geom_histogram(binwidth=18,color="black", fill="grey")+
scale_x_continuous(breaks=c(0,20,40,60,80)
ggplot2 a une excellente documentation sur: docs.ggplot2.org/current/
Pour des exemples spécifiques d'histogramme: http://docs.ggplot2.org/current/geom_histogram.html