Ich benutze Matplotlib, um ein Histogramm zu erstellen.
Gibt es eine Möglichkeit, die Größe der Fächer im Gegensatz zur Anzahl der Fächer manuell festzulegen?
python
matplotlib
histogram
Sam Creamer
quelle
quelle
(data.max() - data.min()) / number_of_bins_you_want
. Das+ binwidth
könnte geändert werden,1
um dies zu einem leicht verständlichen Beispiel zu machen.lw = 5, color = "white"
oder ähnliches fügt weiße Lücken zwischen Balken einFür N Fächer werden die Fachkanten durch eine Liste von N + 1-Werten angegeben, wobei das erste N die unteren Fachkanten und das +1 die obere Kante des letzten Fachs angibt.
Code:
Beachten Sie, dass linspace ein Array von min_edge bis max_edge erzeugt, das in N + 1-Werte oder N Bins unterteilt ist
quelle
Ich denke, der einfache Weg wäre, das Minimum und Maximum der Daten zu berechnen, die Sie haben, und dann zu berechnen
L = max - min
. Dann dividieren SieL
durch die gewünschte Behälterbreite (ich gehe davon aus, dass dies mit der Behältergröße gemeint ist) und verwenden die Obergrenze dieses Werts als Anzahl der Behälter.quelle
Ich mag es, wenn Dinge automatisch passieren und Mülleimer auf "schöne" Werte fallen. Das Folgende scheint ganz gut zu funktionieren.
Das Ergebnis sind Behälter in schönen Intervallen der Behältergröße.
quelle
desired_bin_size=0.05
,min_boundary=0.850
,max_boundary=2.05
die Berechnungn_bins
wirdint(23.999999999999993)
die Ergebnisse in 23 anstelle von 24 und damit ein Fach zu wenig. Eine Rundung vor der Ganzzahlkonvertierung hat bei mir funktioniert:n_bins = int(round((max_boundary - min_boundary) / desired_bin_size, 0)) + 1
Ich benutze Quantile, um Behälter einheitlich zu machen und an die Probe anzupassen:
quelle
np.arange(0, 1.01, 0.5)
oder ersetzennp.linspace(0, 1, 21)
. Es gibt keine Kanten, aber ich verstehe, dass die Felder die gleiche Fläche haben, aber unterschiedliche Breite in der X-Achse?Ich hatte das gleiche Problem wie OP (glaube ich!), Aber ich konnte es nicht so zum Laufen bringen, wie Lastalda es angegeben hatte. Ich weiß nicht, ob ich die Frage richtig interpretiert habe, aber ich habe eine andere Lösung gefunden (es ist wahrscheinlich eine wirklich schlechte Art, dies zu tun).
So habe ich es gemacht:
plt.hist([1,11,21,31,41], bins=[0,10,20,30,40,50], weights=[10,1,40,33,6]);
Was das schafft:
Der erste Parameter "initialisiert" also im Grunde den Behälter - ich erstelle speziell eine Zahl, die zwischen dem Bereich liegt, den ich im Parameter "Behälter" festgelegt habe.
Um dies zu demonstrieren, betrachten Sie das Array im ersten Parameter ([1,11,21,31,41]) und das Array 'bins' im zweiten Parameter ([0,10,20,30,40,50]). ::
Dann benutze ich den Parameter 'weight', um die Größe jedes Behälters zu definieren. Dies ist das Array, das für den Gewichtungsparameter verwendet wird: [10,1,40,33,6].
Der Behälter 0 bis 10 erhält also den Wert 10, der Behälter 11 bis 20 den Wert 1, der Behälter 21 bis 30 den Wert 40 usw.
quelle
Für ein Histogramm mit ganzzahligen x-Werten habe ich letztendlich verwendet
Der Versatz von 0,5 zentriert die Bins auf den Werten der x-Achse. Der
plt.xticks
Aufruf fügt für jede Ganzzahl ein Häkchen hinzu.quelle