Jestem początkującym w Pythonie i chcę wykreślić listę wartości między -0,2 a 0,2. Lista wygląda następująco:
[...-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].
W statystykach nauczyłem się grupować dane w klasy, aby uzyskać przydatny wykres dla histogramu, który zależy od tak dużego data.
Jak mogę dodać klasy w Pythonie do mojego wykresu?
Mój kod to
plt.hist(data)
i histogram wygląda następująco:
Ale powinno wyglądać następująco: mg src = „https://i.stack.imgur.com/k5rwR.png” alt = „tutaj wprowadź opis obrazu” title = „Tylko przykład – skale są różne!”>
Komentarze
- To jest niejasne. Czy pytasz o sposób grupowania danych lub wykreślania zgrupowanych danych?
- @ Stephen Rauch: Proszę o pogrupowanie danych za pomocą plt.hist () lub w inny sposób. Po zgrupowaniu danych chcę zrealizować fabułę. @ Media: plt.hist (cum_returns_10_5, bins = range (min (cum_returns_10_5), max (cum_returns_10_5) + binwidth, binwidth)) NameError: nazwa ' binwidth ' nie jest zdefiniowana plt.hist (data, bins = range (min (data), max (data) + binwidth , szerokość pojemnika)) Twoje rozwiązanie powoduje błąd (patrz powyżej).
- Nie należy umieszczać tych informacji w odpowiedzi. Możesz skomentować, edytować swoje pytanie lub jedno i drugie.
- witaj w społeczności @Tom, użyj komentarzy. powodem, dla którego nie działa, jest to, że musisz je ustawić. są to typowe zmienne do celów ilustracyjnych, zamiast nich należy ustawić wartości.
- Dziękuję za tę wskazówkę @Media! @Stephen Rauch: Czy byłbyś tak miły i dał mi komentarz, czy grupujesz dane w Pythonie, które są zapisane na liście, aby można je było wykreślić? Dziękuję za pomoc 🙂
Odpowiedź
Twój histogram jest prawidłowy, ale zawiera zbyt wiele pojemników przydatne.
Jeśli chcesz mieć kilka równo rozmieszczonych pojemników, możesz po prostu przekazać tę liczbę przez argument bins
plt.hist
, np .:
plt.hist(data, bins=10)
Jeśli chcesz, aby twoje pojemniki miały określone krawędzie, możesz przekazać je jako listę do bins
:
plt.hist(data, bins=[0, 5, 10, 15, 20, 25, 30, 35, 40, 60, 100])
Na koniec możesz również określić metodę automatycznego obliczania krawędzi pojemnika, na przykład auto
(dostępne metody są określone w dokumentacji numpy.histogram_bin_edges
):
plt.hist(data, bins="auto")
Pełny przykładowy kod
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");
Odpowiedź
Musisz określić rozmiar pojemnika , jeśli ja „v Zrozumiałem pytanie. Jak stwierdzono tutaj .
Możesz podać listę z granicami bin.
plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100])
Jeśli chcesz, aby były one równomiernie rozłożone, możesz po prostu użyć range:
plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth))
Możesz także wziąć spójrz na tutaj i tutaj .
Komentarze
- Jeśli chcesz, aby były one równomiernie rozłożone, jest prostszy sposób: zamiast podawać granice bin jako argument, po prostu powiedz matplotlib, ile chcesz pojemników, np.
plt.hist(data, bins=20)
. - @Xavier Dziękuję za odpowiedź, myślę, że możesz przesłać odpowiedź. Jak być może zauważyłeś, pytanie nie zostało jeszcze zamknięte 🙂