[PYTHON] Bei matplotlib ist die vertikale Achse auf der linken Seite des Histogramms die Frequenz und die vertikale Achse auf der rechten Seite die relative Frequenz (möglicherweise ein böser Weg).

Was ist in diesem Artikel zu tun?

Dies ist die Fortsetzung dieses Artikels → ["Machen Sie die vertikale Achse des Histogramms zur relativen Häufigkeit (Gesamthöhe der Spalten = 1) und zur relativen Frequenzdichte (Gesamtfläche des Histogramms = 1) mit matplotlib"](https: // qiita. com / kanedaq / items / 1e7a0e52363224c08980)

Verwenden Sie matplotlib, um ein Histogramm zu erstellen

Und zeichne. Es kann jedoch ein böser Weg sein.

Referenzseite (Danke)

[Python] Wie zeichnet man mit matplotlib ein Diagramm mit zwei Achsen links und rechts?

Quellcode (Jupyter Notebook) und Zeichnungsergebnis

Die Anzahl der Daten beträgt 7.500 und es handelt sich um eine normale Zufallszahl mit einem Durchschnittswert von 50 und einer Standardabweichung von 10. Versuchen Sie zunächst, den folgenden Python-Code auszuführen.


#%%

import numpy as np
import matplotlib.pyplot as plt


#%%

#Datenerstellung
μ = 50
σ = 10
data = [ np.random.normal(μ, σ) for i in range(7500) ]


#%%

#Anzahl der Klassen
num_bins = 20

#Diagrammzeichnung
fig = plt.figure(figsize=(12, 8))
plt.legend()
plt.xlabel('x', fontsize=18)
plt.title('null', fontsize=18)

# (1)Ein Histogramm mit der vertikalen Achse als Frequenz
ax1 = fig.add_subplot(111)
ax1.set_ylabel('frequency', fontsize=18)
ax1.grid(True, color="dimgray")
ax1.set_axisbelow(True)    #Bewegen Sie das Gitter nach hinten
ax1.hist(data, bins=num_bins, rwidth=0.5, align="mid")

# (2)Ein Histogramm mit der vertikalen Achse als relativer Frequenz
ax2 = ax1.twinx()
ax2.set_ylabel('relative frequency', fontsize=18)
ax2.grid(True, color="lightgrey", linestyle="--")
ax2.set_axisbelow(True)    #Bewegen Sie das Gitter nach hinten
weights = np.ones_like(data) / len(data)
ax2.hist(data, bins=num_bins, weights=weights, rwidth=0.5, align="right", color="red")

1.png

Die vertikale Achse = die Frequenzspalte wird in der Standardfarbe gezeichnet, und die vertikale Achse = die Spalte der relativen Frequenz wird nebeneinander in Rot gezeichnet. Leute bestätigen, dass die Höhen beider gleich aussehen </ font> (Der Grund, warum sie böse sind ...)

Wenn die Höhen der Frequenzspalten und die relative Häufigkeit gleich aussehen, stimmen Sie mit den Farben der Spalten überein. Rufen Sie ax2.hist () auf, ohne "color =" red "" anzugeben.

2.png

Die Gitterlinie von ax2 wird vor der Säule von ax1 angezeigt. Um diese horizontale Linie unsichtbar zu machen, habe ich beschlossen, den folgenden Code hinzuzufügen, um dasselbe Diagramm wie ax1 zu überschreiben.


# (3) (1)Passen Sie das Erscheinungsbild von an
ax3 = ax1.twinx()
ax3.set_yticklabels([]) 
ax3.hist(data, bins=num_bins, rwidth=0.5, align="mid")

3.png

Der gesamte Code für die fertige Version ist unten.


#%%

import numpy as np
import matplotlib.pyplot as plt


#%%

#Datenerstellung
μ = 50
σ = 10
data = [ np.random.normal(μ, σ) for i in range(7500) ]


#%%

#Anzahl der Klassen
num_bins = 20

#Diagrammzeichnung
fig = plt.figure(figsize=(12, 8))
plt.legend()
plt.xlabel('x', fontsize=18)
plt.title('null', fontsize=18)

# (1)Ein Histogramm mit der vertikalen Achse als Frequenz
ax1 = fig.add_subplot(111)
ax1.set_ylabel('frequency', fontsize=18)
ax1.grid(True, color="dimgray")
ax1.set_axisbelow(True)    #Bewegen Sie das Gitter nach hinten
ax1.hist(data, bins=num_bins, rwidth=0.5, align="mid")

# (2)Ein Histogramm mit der vertikalen Achse als relativer Frequenz
ax2 = ax1.twinx()
ax2.set_ylabel('relative frequency', fontsize=18)
ax2.grid(True, color="lightgrey", linestyle="--")
ax2.set_axisbelow(True)    #Bewegen Sie das Gitter nach hinten
weights = np.ones_like(data) / len(data)
ax2.hist(data, bins=num_bins, weights=weights, rwidth=0.5, align="right")

# (3) (1)Passen Sie das Erscheinungsbild von an
ax3 = ax1.twinx()
ax3.set_yticklabels([]) 
ax3.hist(data, bins=num_bins, rwidth=0.5, align="mid")

Es fühlt sich wie ein böser Weg an, also lassen Sie mich bitte wissen, ob es einen einfachen Ansatz gibt.

Recommended Posts

Bei matplotlib ist die vertikale Achse auf der linken Seite des Histogramms die Frequenz und die vertikale Achse auf der rechten Seite die relative Frequenz (möglicherweise ein böser Weg).
Stellen Sie die vertikale Achse des Histogramms mit matplotlib auf relative Häufigkeit (Gesamthöhe der Spalten = 1) und relative Frequenzdichte (Gesamtfläche des Histogramms = 1) ein
Vorsichtsmaßnahmen bei der Überlagerung der Wahrscheinlichkeitsdichtefunktion und des Histogramms in matplotlib
Ich möchte ein Histogramm erstellen und die Normalverteilungskurve darauf überlagern. matplotlib edition
Gitteranzeige des Doppelplots (linke und rechte vertikale Achse) (matplotlib)
Warum in der Substitutionsformel eine Scheibe auf die linke Seite setzen?
Laden Sie Daten mit einem Befehl und einer Aktualisierung auf s3 von aws hoch und löschen Sie die verwendeten Daten (unterwegs).
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
Verwenden Sie libsixel, um Sixel in Python auszugeben und das Matplotlib-Diagramm an das Terminal auszugeben.
Ich möchte einen Lebenszyklus in der Aufgabendefinition von ECS festlegen
Wenn sich Achse und Beschriftung in matplotlib überlappen
Der Operator und des Python-Bewertungsausdrucks scheint vom Ausdruck auf der linken Seite ausgewertet zu werden
[Mac] Eine supereinfache Möglichkeit, Systembefehle in Python auszuführen und die Ergebnisse auszugeben
Ein Memo zum visuellen Verstehen der Achse von Pandas.Panel
Schreiben Sie in Python ein logarithmisches Histogramm auf die x-Achse
Ich bin gerade in Singapur. Eine Geschichte über das Erstellen eines LineBot und den Wunsch, einen unvergesslichen Job zu machen
Wie kann man schnell die Häufigkeit des Auftretens von Zeichen aus einer Zeichenfolge in Python zählen?
Eine einfache Möglichkeit, die in Python benötigte Zeit anzuzeigen und sie intelligenter zu verbessern
Beispiele und Gegenmaßnahmen für "Ein Wert versucht, auf einer Kopie eines Slice aus einem Datenrahmen festgelegt zu werden." Warnung bei Pandas
So senden Sie Dateien auf einmal, indem Sie mit SCP in mehreren Schritten eine Verbindung zu einem Host auf der anderen Seite der Plattform herstellen