Diagrama histogramei cu plt.hist ()

Sunt un Python-Newbie și vreau să trasez o listă de valori cuprinse între -0,2 și 0,2. Lista arată așa

[...-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]. 

În statistici am învățat să-mi grupez datele în clase pentru a obține un grafic util pentru o histogramă, care depinde de atât de mare data.

Cum pot adăuga clase în python la complotul meu?

Codul meu este

plt.hist(data) 

și histograma arată ca introduceți descrierea imaginii aici

Dar ar trebui să arate ca mg src = „https://i.stack.imgur.com/k5rwR.png” alt = „introduceți descrierea imaginii aici” title = „Doar un exemplu – scalele sunt diferite!”>

Comentarii

  • Acest lucru este neclar. Întrebați cum să grupați datele sau cum să trasați datele grupate?
  • @ Stephen Rauch: cer gruparea datelor cu plt.hist () sau într-un alt mod. După gruparea datelor vreau să realizez complotul. @ Media: plt.hist (cum_returns_10_5, bins = range (min (cum_returns_10_5), max (cum_returns_10_5) + binwidth, binwidth)) NameError: numele ' binwidth ' nu este definit plt.hist (date, bins = range (min (data), max (data) + binwidth , lățimea coșului)) Soluția dvs. produce o eroare (vedeți mai sus).
  • Nu ar trebui să puneți aceste informații într-un răspuns. Puteți să comentați sau să vă editați întrebarea sau ambele.
  • bun venit la comunitate @Tom, folosiți comentarii. motivul pentru care nu funcționează este că trebuie să le setați. sunt variabile tipice în scop ilustrativ, trebuie să setați valori în loc de ele.
  • Vă mulțumim pentru acest indiciu @Media! @ Stephen Rauch: Ați fi atât de amabil și să-mi dați un comentariu despre grupați datele în python care sunt scrise într-o listă pentru a putea fi trasate? Vă mulțumim pentru ajutor 🙂

Răspuns

Histograma dvs. este validă, dar are prea multe pubele pentru a fi util.

Dacă doriți un număr de pubele la distanță egală, puteți pur și simplu să treceți numărul respectiv prin argumentul bins al plt.hist, de exemplu:

plt.hist(data, bins=10) 

Dacă doriți ca coșurile dvs. să aibă margini specifice, le puteți transmite ca listă la bins:

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

În cele din urmă, puteți specifica și o metodă de calculare automată a marginilor coșului, cum ar fi auto (metodele disponibile sunt specificate în documentația numpy.histogram_bin_edges ):

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

Exemplu complet de cod

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"); 

introduceți descrierea imaginii aici

Răspuns

Trebuie să specificați dimensiunea coșului , dacă eu „v Mi-am dat seama de întrebare. După cum s-a menționat aici .

Puteți oferi o listă cu limitele coșului.

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

Dacă doriți doar ca acestea să fie distribuite în mod egal, puteți utiliza pur și simplu intervalul:

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

De asemenea, puteți lua o privire la aici și aici .

Comentarii

  • Dacă doriți ca acestea să fie distribuite în mod egal, există o modalitate mai simplă: în loc să dați limitele coșului ca argument, spuneți doar matplotlib câte coșuri doriți, de ex. plt.hist(data, bins=20).
  • @Xavier Vă mulțumim pentru răspuns, cred că vă recomandăm să trimiteți răspunsul. După cum probabil ați observat, întrebarea nu este încă închisă 🙂

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *