[PYTHON] Verhalten von Matplotlib: Histgramm normiert

Histgramm mit Matplotlib

Ein Hinweis darauf, wovon ich beim Erstellen eines Histogramms mit matplotlib süchtig war

Die Fallstricke von normiert

Beachten Sie, dass matplotlib.axes.Axes.hist () oder matplotlib.pyplot.hist (), mit denen ein Histogramm mit matplotlib erstellt wird, eine schreckliche Gefahr darstellen. Beim Erstellen eines Histogramms fügen wir häufig die Option normiert = 1 hinzu, um die Frequenz zu normalisieren. Trotz dieser Option kann jedoch das folgende Histogramm erhalten werden.

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
nor = np.random.normal(0,0.5,1000)
plt.hist(nor,normed=1,range=(-3,3),bins=300)
plt.savefig("test.pdf")

c0e82554-a3d9-11f4-b7c0-58dd5fe0b006.png

Eh, der Wert der y-Achsenskala ist größer als 1. ..

Zuerst dachte ich, dies sei ein Fehler und versuchte, mit Barplot ein Histogramm zu zeichnen. Aber es ist zu viel Mühe. Ich dachte, es wäre eine Seegeborene, aber es hat nicht funktioniert, weil ich das gleiche Problem hatte. Als ich dachte, es sei ein Rätsel, wurde mir klar, dass es eines gab.

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
nor = np.random.normal(0,0.5,1000)
plt.hist(nor,normed=1,range=(-3,3),bins=6)
plt.savefig("test.pdf")

5170b571-cc4a-88b6-b414-dec61b28d729.png

Wenn die Breite von __bin 1 ist, funktioniert es normal. __ __ Auf keinen Fall __ ,, Wie, __bin wird normalisiert, so dass die Gesamtfläche 1 ist. Wenn Sie sich die Details der Daten mit der Histogrammfunktion von numpy ansehen (das Verhalten ist das gleiche wie das von matplotlib).

import numpy as np
np.random.seed(0)
nor = np.random.normal(0,0.5,1000)
hist,pos = np.histogram(nor,normed=1,range=(-3,3),bins=300)
print(np.sum(hist))
#50.0
print(np.sum(hist)*6.0/300)
#1.0

Wird sein. Daher können Sie den Code wie folgt umschreiben.

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
nor = np.random.normal(0,0.5,1000)
binnum = 300
fig = plt.figure()
ax = plt.subplot(111)
ax.hist(nor,normed=1,range=(-3,3),bins=binnum)
ax_yticklocs = ax.yaxis.get_ticklocs()#Informationen zur Waage abrufen
ax_yticklocs = list(map(lambda x: x * len(range(-3,3))*1.0/binnum, ax_yticklocs))#Multiplizieren Sie den Wert der ursprünglichen Skala mit der Breite des Fachs
ax.yaxis.set_ticklabels(list(map(lambda x: "%0.2f" % x, ax_yticklocs)))Feste Skala anzeigen
plt.savefig("test.pdf")

iTerm2.xULA2R.test copy.png

Sie sollten wahrscheinlich die gewünschte Skala haben. Diese Implementierung ist jedoch verwirrend ...

Recommended Posts

Verhalten von Matplotlib: Histgramm normiert
Verhalten von multiprocessing.pool.Pool.map
Histogramm mit Matplotlib
Visualisieren Sie das Verhalten des Sortieralgorithmus mit matplotlib
[Python] Verhalten von Argmax
Installation von matplotlib (Python 3.3.2)
Japanische Anzeige von Matplotlib, Seaborn
Transparente Überlagerung des Histogramms durch Matplotlib
Ändern Sie den Stil von matplotlib
Verhalten der Pandas Rolling () Methode
Auszug aus Parametern für das Matplotlib-Histogramm
Installation von SciPy und matplotlib (Python)
Fügen Sie dem Matplotlib-Histogramm ein kumulatives Verhältnis hinzu
Über den Rückgabewert des Histogramms.
Installation von Python, SciPy, matplotlib (Windows)
Zusammenfassung des Konvertierungsverhaltens von go json
Verhalten von Python3 durch Sakuras Server
Über das Verhalten von Yield_per von SqlAlchemy
Trennlinie im Matplotlib-Histogramm anzeigen
Über die Größe der Punkte in Matplotlib
Genaues Verhalten von diff --ignore-Matching-Lines = RE
Schreiben Sie ein gestapeltes Histogramm mit matplotlib
Stellen Sie die Behälterbreite mit dem Histogramm von Matplotlib und Seaborn klar und ordentlich ein