Jeg er en Python-nybegynner og vil plotte en liste over verdier mellom -0,2 og 0,2. Listen ser slik ut
[...-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].
I statistikk har jeg lært å gruppere dataene mine i klasser for å få et nyttig plott for et histogram, som avhenger av så stor data.
Hvordan kan jeg legge til klasser i python i plottet mitt?
Koden min er
plt.hist(data)
Men det skal se ut som mg src = «https://i.stack.imgur.com/k5rwR.png» alt = «skriv inn bildebeskrivelse her» title = «Bare et eksempel – skalaene er forskjellige!»>
Kommentarer
- Dette er uklart. Spør du etter hvordan du skal gruppere dataene, eller hvordan du skal plotte grupperte data?
- @ Stephen Rauch: Jeg ber om å gruppere dataene med plt.hist () eller på en annen måte. Etter gruppering av dataene vil jeg realisere plottet. @ Media: plt.hist (cum_returns_10_5, bins = range (min (cum_returns_10_5), max (cum_returns_10_5) + binwidth, binwidth)) Navn Feil: navn ' binwidth ' er ikke definert plt.hist (data, bins = range (min (data), max (data) + binwidth , bin bredde)) Løsningen din gir en feil (se ovenfor).
- Du bør ikke legge denne informasjonen i et svar. Du kan kommentere, eller redigere spørsmålet ditt, eller begge deler.
- velkommen til samfunnet @ Tom, bruk kommentarer. grunnen til at det ikke fungerer er at du må sette dem. de er typiske variabler for illustrasjonsformål, du må sette verdier i stedet for dem.
- Takk for det hintet @ Media! @Stephen Rauch: Ville du være så snill og gi meg en kommentar til, grupperer du data i python som er skrevet i en liste slik at de kan plottes? Takk for hjelpen 🙂
Svar
Histogrammet ditt er gyldig, men det har for mange kasser nyttig.
Hvis du vil ha et antall hyller med like store mellomrom, kan du ganske enkelt føre dette tallet gjennom bins
-argumentet til plt.hist
, f.eks:
plt.hist(data, bins=10)
Hvis du vil at søppelkassene dine skal ha spesifikke kanter, kan du sende disse som en liste til bins
:
plt.hist(data, bins=[0, 5, 10, 15, 20, 25, 30, 35, 40, 60, 100])
Til slutt kan du også spesifisere en metode for automatisk å beregne papirkurven, for eksempel auto
(tilgjengelige metoder er spesifisert i dokumentasjon for numpy.histogram_bin_edges
):
plt.hist(data, bins="auto")
Komplett kodeeksempel
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");
Svar
Du må spesifisere søppelstørrelsen , hvis jeg «v Jeg fant ut spørsmålet. Som sagt her .
Du kan gi en liste med søppelgrensene.
plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100])
Hvis du bare vil ha dem likt fordelt, kan du bare bruke rekkevidde:
plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth))
Du kan også ta en titt på her og her .
Kommentarer
- Hvis du vil ha dem likt fordelt, er det en enklere måte: i stedet for å gi søppelgrensene som argument, fortell bare matplotlib hvor mange søppel du vil ha, f.eks.
plt.hist(data, bins=20)
. - @Xavier Takk for svaret ditt, jeg antar at du kanskje vil sende inn svaret ditt. Som du kanskje har lagt merke til, er ikke spørsmålet lukket ennå 🙂