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