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