Jsem Python-Newbie a chci vykreslit seznam hodnot mezi -0,2 a 0,2. Seznam vypadá takto
[...-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].
Ve statistikách jsem se naučil seskupovat svá data do tříd, abych získal užitečný graf pro histogram, který závisí na tak velkém data.
Jak mohu do svého spiknutí přidat třídy v pythonu?
Můj kód je
plt.hist(data)
Ale měl by vypadat jako mg src = „https://i.stack.imgur.com/k5rwR.png“ alt = „zde zadejte popis obrázku“ title = „Pouze příklad – váhy se liší!“>
Komentáře
- To je nejasné. Ptáte se, jak seskupit data nebo jak vykreslit seskupená data?
- @ Stephen Rauch: Žádám o seskupení dat pomocí plt.hist () nebo jiným způsobem. Po seskupení dat chci realizovat graf. @ Media: plt.hist (cum_returns_10_5, bins = range (min (cum_returns_10_5), max (cum_returns_10_5) + binwidth, binwidth)) NázevError: název ' binwidth ' není definován plt.hist (data, bins = range (min (data), max (data) + binwidth) , šířka koše)) Vaše řešení způsobí chybu (podívejte se výše).
- Tyto informace byste neměli dávat do odpovědi. Můžete okomentovat nebo upravit svou otázku, nebo obojí.
- vítejte v komunitě @Tom, použijte komentáře. Důvod, proč to nefunguje, je ten, že je musíte nastavit. jsou to typické proměnné pro ilustrační účely, místo nich je třeba nastavit hodnoty.
- Děkuji vám za tuto nápovědu @Media! @Stephen Rauch: Byl byste tak laskavý a dejte mi komentář k tomu, že seskupujete data v pythonu, která jsou zapsána do seznamu, aby bylo možné je vykreslit? Děkujeme za vaši pomoc 🙂
Odpověď
Váš histogram je platný, ale má příliš mnoho přihrádek. užitečné.
Pokud chcete mít několik stejně rozmístěných zásobníků, můžete toto číslo jednoduše předat argumentem bins
plt.hist
, např .:
plt.hist(data, bins=10)
Pokud chcete, aby vaše přihrádky měly specifické hrany, můžete je předat jako seznam na bins
:
plt.hist(data, bins=[0, 5, 10, 15, 20, 25, 30, 35, 40, 60, 100])
Nakonec můžete také určit metodu pro automatický výpočet okrajů koše, například auto
(dostupné metody jsou uvedeny v dokumentaci numpy.histogram_bin_edges
):
plt.hist(data, bins="auto")
Ukázka úplného kódu
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");
odpověď
Musíte zadat velikost přihrádky , kdybych „v Zjistil jsem otázku. Jak je uvedeno zde .
Můžete zadat seznam s hranicemi bin.
plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100])
Pokud je chcete rovnoměrně distribuovat, můžete jednoduše použít range:
plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth))
Můžete si také vzít podívejte se sem a sem .
Komentáře
- Pokud je chcete rovnoměrně distribuovat, existuje jednodušší způsob: místo toho, abyste zadali hranice bin jako argument, řekněte matplotlib, kolik košů chcete, např.
plt.hist(data, bins=20)
. - @Xavier Děkuji za odpověď, myslím, že budete chtít odpověď odeslat. Jak jste si možná všimli, otázka ještě není uzavřena 🙂