Histogramme à l'aide de gnuplot?
Je sais comment créer un histogramme (il suffit d'utiliser "avec des cases") dans gnuplot si mon .dat fichier a déjà correctement mise à la poubelle de données. Est-il possible de prendre une liste de numéros et ont gnuplot fournir un histogramme basé sur les gammes et tailles de bac fournit de l'utilisateur?
- Si vous n'obtenez pas une réponse il existe d'autres outils qui sont destinés à faire de telles choses. J'utilise la Racine (root.le cern.ch), beaucoup d'autres ici l'utilisation de R, et il y a au moins un peu d'autres options.
- Bin, c'est la gamme de valeurs recueillies pour chaque barre de l'histogramme. Chaque cellule a une limite inférieure et supérieure, et toutes les données avec une valeur dans cette gamme sera pris en compte dans ce bar. Binned signifie que mon fichier de données est déjà organisé par le nombre de données de points de chute à l'intérieur de chaque cellule, de sorte qu'il est prêt à être représentée sous la forme d'un histogramme.
Vous devez vous connecter pour publier un commentaire.
oui, et sa rapide et simple bien que très caché:
découvrez
help smooth freq
de voir pourquoi ci-dessus fait un histogrammepour faire face aux plages il suffit de régler le xrange variable.
J'ai quelques corrections/ajouts à Born2Smile est très utile de répondre:
set boxwidth binwidth
bin
fonction:bin(x,width)=width*floor(x/width) + width/2.0
bin(x,width)=width*floor(x/width) + binwidth/2.0
(les calculs en virgule flottante)bin(x,width)=width*floor(x/width) + width/2.0
. Si nous sommes de passagewidth
comme un argument, puis l'utiliser. 🙂Être très prudent: toutes les réponses sur cette page sont implicitement de prendre la décision de l'endroit où le binning commence - le bord gauche de la plus à gauche de la corbeille, si vous le souhaitez de les mains de l'utilisateur. Si l'utilisateur est de combiner l'une de ces fonctions pour le regroupement des données avec son/sa propre décision sur l'endroit où binning commence (comme on le fait sur le blog qui est lié ci-dessus) les fonctions ci-dessus sont toutes erronées. Avec l'arbitraire d'un point de départ pour binning "Min", la fonction correcte est:
Vous pouvez voir pourquoi il est correct de manière séquentielle (il permet de tirer quelques bacs et un point quelque part dans l'un d'eux). Soustraire Min à partir de votre point de données pour voir comment loin dans le binning gamme c'est. Puis diviser par binwidth de sorte que vous avez un travail efficace dans les unités de "bins". Puis "plancher" de la suite pour aller vers le bord gauche de ce bac, ajouter 0,5 à aller au milieu de la cellule, de la multiplier par la largeur de sorte que vous n'avez plus de travail dans les unités de bacs, mais dans l'absolu à nouveau, puis ajouter enfin de retour sur le Min de décalage que vous soustrait au début.
Considérer cette fonction dans l'action:
par exemple, la valeur de 1,1 fait véritablement partie de la gauche de la corbeille:
Born2Smile la réponse est correcte uniquement si le bac limites se produire à (n+0.5)*binwidth (où n fonctionne sur les entiers). mas90 la réponse est correcte uniquement si le bac limites se produire à n*binwidth.
Voulez-vous de tracer un graphique comme celui-ci?
oui? Ensuite, vous pouvez jeter un oeil à mon article de blog: http://gnuplot-surprising.blogspot.com/2011/09/statistic-analysis-and-histogram.html
Clé de lignes dans le code:
Comme d'habitude, Gnuplot est un outil fantastique pour complot en regardant doux graphiques et il peut être fait pour effectuer toutes sortes de calculs. Cependant, il est destiné à tracer des données plutôt que de servir comme une calculatrice et il est souvent plus facile d'utiliser un programme extérieur (par exemple, l'Octave) pour faire le plus "compliqué", de calculs, d'enregistrer ces données dans un fichier, puis d'utiliser Gnuplot pour produire le graphique. Pour le problème ci-dessus, découvrez le "hist" la fonction est d'Octave à l'aide de
[freq,bins]=hist(data)
, puis tracer cette Gnuplot à l'aide deJ'ai trouvé ce débat très utile, mais j'ai vécu quelques "arrondi" les problèmes.
Plus précisément, à l'aide d'un binwidth de 0,05, j'ai remarqué que, avec les techniques présentées ci-dessus, les points de données de lecture de 0,1 et 0,15 tomber dans la même cellule. Ce (évidemment comportement indésirable) est probablement dû à la "parole" de la fonction.
Ci-après est ma petite contribution pour essayer de contourner cela.
Cette méthode récursive est pour x >=0; on pourrait généraliser ce avec plus d'instructions conditionnelles pour obtenir quelque chose de plus général encore.
Nous n'avons pas besoin d'utiliser la méthode récursive, il peut être lent. Ma solution est d'utiliser une fonction définie par l'utilisateur rint instesd de instrinsic fonction de type int ou au sol.
Cette fonction
rint(0.0003/0.0001)=3
, tandis queint(0.0003/0.0001)=floor(0.0003/0.0001)=2
.Pourquoi? S'il vous plaît regardez Perl fonction int et le remplissage de zéros
J'ai un peu de modification à Born2Smile de la solution.
Je sais que cela ne fait pas beaucoup de sens, mais vous souhaitez peut-être juste au cas où. Si vos données est de type entier et vous avez besoin d'un flotteur bin taille (peut-être pour la comparaison avec un autre jeu de données, ou de la parcelle de la densité dans la grille la plus fine), vous aurez besoin d'ajouter un nombre aléatoire entre 0 et 1 à l'intérieur de chaussée. Sinon, il y aura des pointes en raison de round up d'erreur.
floor(x/width+0.5)
ne le fera pas, car il crée un modèle qui n'est pas vrai pour les données d'origine.À l'égard de binning fonctions, je n'ai pas à attendre le résultat de l'fonctions offertes jusqu'à présent. À savoir, si mon binwidth est de 0,001, ces fonctions étaient de centrage de la trémies de 0,0005 points, alors que je pense que c'est plus intuitif pour avoir les poubelles centrée sur 0.001 limites.
En d'autres termes, j'aimerais avoir
Le binning fonction je suis venu avec est
Voici un script de comparer certains de l'offre bin fonctions de celui-ci:
et voici la sortie