Jeg er en Python-nybegynder og vil plotte en liste over værdier mellem -0,2 og 0,2. Listen ser sådan ud
[...-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 statistikker har jeg lært at gruppere mine data i klasser for at få et nyttigt plot til et histogram, som afhænger af så stor data.
Hvordan kan jeg tilføje klasser i python til min plot?
Min kode er
plt.hist(data)
Men det skal se ud som mg src = “https://i.stack.imgur.com/k5rwR.png” alt = “indtast billedebeskrivelse her” title = “Bare et eksempel – skalaer er forskellige!”>
Kommentarer
- Dette er uklart. Beder du om, hvordan du grupperer dataene, eller hvordan du plotter grupperede data?
- @ Stephen Rauch: Jeg beder om at gruppere dataene med plt.hist () eller på en anden måde. Efter gruppering af data vil jeg realisere plottet. @ Media: plt.hist (cum_returns_10_5, bins = interval (min (cum_returns_10_5), max (cum_returns_10_5) + binwidth, binwidth)) Navn Fejl: navn ' binwidth ' er ikke defineret plt.hist (data, kasser = rækkevidde (min (data), max (data) + binbredde , bin bredde)) Din løsning giver en fejl (se ovenfor).
- Du bør ikke sætte disse oplysninger i et svar. Du kan kommentere eller redigere dit spørgsmål eller begge dele.
- velkommen til samfundet @ Tom, brug kommentarer. grunden til, at det ikke fungerer, er, at du skal indstille dem. de er typiske variabler til illustration, du skal angive værdier i stedet for dem.
- Tak for det tip @Media! @Stephen Rauch: Ville du være så venlig og give mig en kommentar til, grupperer du data i python, der er skrevet på en liste, så de kan plottes? Tak for din hjælp 🙂
Svar
Dit histogram er gyldigt, men det har for mange skraldespande til at være nyttigt.
Hvis du vil have et antal placeringer med lige store mellemrum, kan du blot føre dette nummer gennem bins
argumentet for plt.hist
, fx:
plt.hist(data, bins=10)
Hvis du vil have dine skraldespande til at have specifikke 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])
Endelig kan du også angive en metode til automatisk at beregne papirkurven, såsom auto
(tilgængelige metoder er specificeret i dokumentation for numpy.histogram_bin_edges
):
plt.hist(data, bins="auto")
Komplet 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 skal angive bin størrelse , hvis jeg “v Jeg fandt ud af spørgsmålet. Som nævnt her .
Du kan give en liste med skraldespandgrænser.
plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100])
Hvis du bare vil have dem ligeligt fordelt, kan du blot bruge rækkevidde:
plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth))
Du kan også tage et kig på her og her .
Kommentarer
- Hvis du vil have dem ligeligt fordelt, er der en enklere måde: i stedet for at give skraldespandgrænserne som et argument, skal du bare fortælle matplotlib, hvor mange skraldespande du vil have, f.eks.
plt.hist(data, bins=20)
. - @Xavier Tak for dit svar, jeg antager, at du måske vil sende dit svar. Som du måske har bemærket, er spørgsmålet endnu ikke lukket 🙂