Diagramme dhistogramme avec plt.hist ()

Je suis un Python-Newbie et je veux tracer une liste de valeurs entre -0,2 et 0,2. La liste ressemble à ceci

[...-0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01489985147131656, -0.015833709930856088, -0.015833709930856088, -0.015833709930856088, -0.015833709930856088, -0.015833709930856088...and so on]. 

Dans les statistiques, jai appris à regrouper mes données en classes pour obtenir un tracé utile pour un histogramme, qui dépend dune telle taille data.

Comment puis-je ajouter des classes en python à mon tracé?

Mon code est

plt.hist(data) 

et lhistogramme ressemble à entrez la description de limage ici

Mais il devrait ressembler à mg src = « https://i.stack.imgur.com/k5rwR.png » alt = « entrez la description de limage ici » title = « Juste un exemple – les échelles sont différentes! »>

Commentaires

  • Ce nest pas clair. Demandez-vous comment regrouper les données ou comment tracer des données groupées?
  • @ Stephen Rauch: Je demande de regrouper les données avec plt.hist () ou dune autre manière. Après avoir regroupé les données, je veux réaliser le tracé. @ Media: plt.hist (cum_returns_10_5, bins = range (min (cum_returns_10_5), max (cum_returns_10_5) + binwidth, binwidth)) NameError: name ' binwidth ' nest pas défini plt.hist (data, bins = range (min (données), max (données) + binwidth , bin width)) Votre solution produit une erreur (regardez ci-dessus).
  • Vous ne devez pas mettre ces informations dans une réponse. Vous pouvez commenter, modifier votre question, ou les deux.
  • Bienvenue dans la communauté @Tom, utilisez les commentaires. la raison pour laquelle cela ne fonctionne pas est que vous devez les définir. ce sont des variables typiques à des fins dillustration, vous devez définir des valeurs à leur place.
  • Merci pour cet indice @Media! @Stephen Rauch: Pourriez-vous être si gentil et me dire comment regroupez-vous les données en python qui sont écrites dans une liste pour quelles puissent être tracées? Merci pour votre aide 🙂

Réponse

Votre histogramme est valide, mais il comporte trop de cases pour être utile.

Si vous voulez un certain nombre de cases également espacées, vous pouvez simplement passer ce nombre via largument bins de plt.hist, par exemple:

plt.hist(data, bins=10) 

Si vous voulez que vos bacs aient des arêtes spécifiques, vous pouvez les transmettre sous forme de liste à bins:

plt.hist(data, bins=[0, 5, 10, 15, 20, 25, 30, 35, 40, 60, 100]) 

Enfin, vous pouvez également spécifier une méthode pour calculer automatiquement les bords du bac, telle que auto (les méthodes disponibles sont spécifiées dans la documentation de numpy.histogram_bin_edges ):

plt.hist(data, bins="auto") 

Exemple de code complet

import matplotlib.pyplot as plt import numpy as np # fix the random state for reproducibility np.random.seed(19680801); # sum of 2 normal distributions n = 500; data = 10 * np.random.randn(n) + 20 * np.random.randn(n) + 20; # plot histograms with various bins fig, axs = plt.subplots(1, 3, sharey=True, tight_layout=True, figsize=(9,3)); axs[0].hist(data, bins=10); axs[1].hist(data, bins=[0, 5, 10, 15, 20, 25, 30, 35, 40, 60, 100]); axs[2].hist(data, bins="auto"); 

entrez la description de limage ici

Réponse

Vous devez spécifier la taille du bac , si je « v Nous avons compris la question. Comme indiqué ici .

Vous pouvez donner une liste avec les limites du bac.

plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100]) 

Si vous voulez juste quils soient distribués de manière égale, vous pouvez simplement utiliser range:

plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth)) 

Vous pouvez également prendre regardez ici et ici .

Commentaires

  • Si vous voulez quils soient répartis de manière égale, il existe un moyen plus simple: au lieu de donner les limites de bin comme argument, dites simplement à matplotlib combien de bins vous voulez, par exemple plt.hist(data, bins=20).
  • @Xavier Merci pour votre réponse, je suppose que vous voudrez peut-être soumettre votre réponse. Comme vous lavez peut-être remarqué, la question nest pas encore close 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *