Jag är en Python-nybörjare och vill plotta en lista med värden mellan -0,2 och 0,2. Listan ser ut så här
[...-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 statistik har jag lärt mig att gruppera mina data i klasser för att få ett användbart diagram för ett histogram, vilket beror på så stor data.
Hur kan jag lägga till klasser i python till min plot?
Min kod är
plt.hist(data)
Men det ska se ut som mg src = ”https://i.stack.imgur.com/k5rwR.png” alt = ”ange bildbeskrivning här” title = ”Bara ett exempel – skalorna är olika!”>
Kommentarer
- Detta är oklart. Frågar du hur man grupperar data eller hur man plottar grupperade data?
- @ Stephen Rauch: Jag ber om att gruppera data med plt.hist () eller på annat sätt. Efter gruppering av data vill jag förverkliga plot. @ Media: plt.hist (cum_returns_10_5, bin = intervall (min (cum_returns_10_5), max (cum_returns_10_5) + binwidth, binwidth)) Namn Fel: namn ' binwidth ' definieras inte plt.hist (data, lagerplatser = intervall (min (data), max (data) + binbredd , bin bredd)) Din lösning ger ett fel (se ovan).
- Du bör inte lägga den här informationen till ett svar. Du kan kommentera eller redigera din fråga eller båda.
- Välkommen till communityn @ Tom, använd kommentarer. anledningen till att det inte fungerar är att du måste ställa in dem. de är typiska variabler för att illustrera, du måste ställa in värden istället för dem.
- Tack för det tipset @Media! @Stephen Rauch: Skulle du vara så snäll och ge mig en kommentar om grupperar du data i python som är skrivna i en lista så att de kan plottas? Tack för din hjälp 🙂
Svar
Ditt histogram är giltigt, men det har för många lagerplatser användbart.
Om du vill ha ett antal lager med jämnt mellanrum kan du helt enkelt skicka det numret genom bins
-argumentet för plt.hist
, t.ex.:
plt.hist(data, bins=10)
Om du vill att dina soptunnor ska ha specifika kanter kan du skicka dessa som en lista till bins
:
plt.hist(data, bins=[0, 5, 10, 15, 20, 25, 30, 35, 40, 60, 100])
Slutligen kan du också ange en metod för att automatiskt beräkna papperskorgen, till exempel auto
(tillgängliga metoder anges i dokumentation för numpy.histogram_bin_edges
):
plt.hist(data, bins="auto")
Komplett kodprov
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 måste ange pappersstorleken , om jag ”v jag fick reda på frågan. Som sagt här .
Du kan ge en lista med soptunnans gränser.
plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100])
Om du bara vill ha dem lika fördelade kan du helt enkelt använda intervall:
plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth))
Du kan också ta en titt på här och här .
Kommentarer
- Om du vill ha dem lika fördelade finns det ett enklare sätt: istället för att ge skräppostgränserna som ett argument, berätta bara för matplotlib hur många lager du vill ha, t.ex.
plt.hist(data, bins=20)
. - @Xavier Tack för ditt svar, jag antar att du kanske vill skicka ditt svar. Som du kanske har märkt är frågan inte stängd ännu 🙂