Histogramplot met plt.hist ()

Ik ben een Python-Newbie en wil een lijst met waarden tussen -0,2 en 0,2 plotten. De lijst ziet er als volgt uit

[...-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]. 

In statistieken heb ik geleerd mijn gegevens in klassen te groeperen om een bruikbare plot te krijgen voor een histogram, dat afhangt van zon grote data.

Hoe kan ik klassen in Python aan mijn plot toevoegen?

Mijn code is

plt.hist(data) 

en histogram ziet eruit als voer hier een beschrijving van de afbeelding in

Maar het zou eruit moeten zien als mg src = “https://i.stack.imgur.com/k5rwR.png” alt = “voer hier de afbeeldingsbeschrijving in” title = “Gewoon een voorbeeld – schalen zijn anders!”>

Opmerkingen

  • Dit is onduidelijk. Vraagt u hoe u de gegevens moet groeperen of hoe u gegroepeerde gegevens kunt plotten?
  • @ Stephen Rauch: ik vraag om de gegevens te groeperen met plt.hist () of op een andere manier. Na het groeperen van de gegevens wil ik de plot realiseren. @ Media: plt.hist (cum_returns_10_5, bins = range (min (cum_returns_10_5), max (cum_returns_10_5) + binwidth, binwidth)) NameError: naam ' binwidth ' is niet gedefinieerd plt.hist (data, bins = range (min (data), max (data) + binwidth , bin breedte)) Uw oplossing levert een fout op (kijk hierboven).
  • U moet deze informatie niet in een antwoord opnemen. Je kunt opmerkingen plaatsen, je vraag bewerken, of beide.
  • welkom bij de community @Tom, gebruik opmerkingen. de reden dat het niet werkt, is dat u ze moet instellen. het zijn typische variabelen ter illustratie, je moet waarden instellen in plaats van hen.
  • Bedankt voor die hint @Media! @Stephen Rauch: Zou je zo vriendelijk willen zijn en me een opmerking willen geven over groepeer je gegevens in python die in een lijst zijn geschreven, zodat ze kunnen worden geplot? Bedankt voor je hulp 🙂

Answer

Je histogram is geldig, maar het heeft te veel opslaglocaties handig.

Als u een aantal bakken met gelijke tussenruimte wilt, kunt u dat nummer eenvoudig doorgeven via het bins -argument van plt.hist, bijv .:

plt.hist(data, bins=10) 

Als u wilt dat uw bakken specifieke randen hebben, kunt u deze als een lijst doorgeven aan bins:

plt.hist(data, bins=[0, 5, 10, 15, 20, 25, 30, 35, 40, 60, 100]) 

Ten slotte kunt u ook een methode specificeren om de binranden automatisch te berekenen, zoals auto (beschikbare methoden worden gespecificeerd in de documentatie van numpy.histogram_bin_edges ):

plt.hist(data, bins="auto") 

Compleet codevoorbeeld

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"); 

voer de afbeeldingsbeschrijving hier in

Antwoord

U moet de bakgrootte specificeren , als ik “v Hij bedacht de vraag. Zoals hier vermeld.

Je kunt een lijst geven met de bin-grenzen.

plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100]) 

Als u ze gewoon gelijkmatig verdeeld wilt hebben, kunt u eenvoudig bereik gebruiken:

plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth)) 

U kunt ook een kijkje hier en hier .

Reacties

  • Als je ze gelijkmatig verdeeld wilt hebben, is er een eenvoudigere manier: in plaats van de bin-grenzen als argument op te geven, vertel je matplotlib hoeveel bakken je wilt, bijv. plt.hist(data, bins=20).
  • @Xavier Bedankt voor je reactie, ik denk dat je je antwoord misschien wilt indienen. Zoals je misschien hebt gemerkt, is de vraag nog niet gesloten 🙂

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *