[PYTHON] Stellen Sie die Behälterbreite mit dem Histogramm von Matplotlib und Seaborn klar und ordentlich ein

Einführung

unsplash-logoIcons8 Team

Um die Verteilung der Daten für jedes Etikett zu bestätigen, werden die Histogramme häufig überlagert und aufgezeichnet. In einigen Fällen ist der Unterschied in der Behälterbreite jedoch abhängig von den Daten erkennbar. Es tritt nicht auf, selbst wenn Sie BI-Tools wie Tableau verwenden, aber matplotlib und seaborn passen es nicht selbst an, sodass Sie es selbst handhaben müssen.

Methode

Verwenden Sie das Argument "Bins".

bins : int or sequence or str, optional matplotlib.pyplot.hist

Da "Bins" nicht nur ganzzahlige Werte, sondern auch "Sequenzen" empfangen können, Sie müssen lediglich die Maximal- und Minimalwerte in der Bereichsfunktion angeben und die gewünschte Anzahl von Unterteilungen festlegen.


import numpy as np
import matplotlib.pyplot as plt

#Bereiten Sie einen DataFrame mit zwei Arten von Beschriftungen und unterschiedlicher Datenverteilung vor
df_1st = pd.DataFrame(np.random.normal(loc=20, scale=10, size=100), columns=["val"])
df_1st["target"] = "class_1"
df_2nd = pd.DataFrame(np.random.normal(loc=15, scale=20, size=100), columns=["val"])
df_2nd["target"] = "class_2"

df = pd.concat([df_1st, df_2nd])

Vor der Korrektur der Behälterbreite

import matplotlib as plt
import seaborn as sns

#Plotten Sie für jedes Ziel
for val in df["target"].unique():
    ax = sns.distplot(df.query('target == @val')["val"], kde=False, label=f"target is {val}")

ax.legend()

Nach Korrektur der Behälterbreite

#Mindestwert
x_min = int(df["val"].min())

#Maximalwert
x_max = int(df["val"].max())

#5 Intervalle im Bereich vom Minimalwert bis zum Maximalwert
range_bin_width = range(x_min, x_max, 5)

#Plotten Sie für jedes Ziel
for val in df["target"].unique():
    ax = sns.distplot(df.query('target == @val')["val"], bins=range_bin_width, kde=False, label=f"target is {val}")

ax.legend()

Ergänzung

Wenn Bins nicht gesetzt ist, wird die Anzahl der Bins durch eine Methode namens ** Freedman-Diaconis-Regel ** bestimmt. Diese Technik ist einigermaßen gut und wird beim Zeichnen eines einzelnen Datenelements im Allgemeinen ohne Probleme aufgezeichnet.

distributions.py


def _freedman_diaconis_bins(a):
    """Calculate number of hist bins using Freedman-Diaconis rule."""
    # From https://stats.stackexchange.com/questions/798/
    a = np.asarray(a)
    if len(a) < 2:
        return 1
    h = 2 * iqr(a) / (len(a) ** (1 / 3))
    # fall back to sqrt(a) bins if iqr is 0
    if h == 0:
        return int(np.sqrt(a.size))
    else:
        return int(np.ceil((a.max() - a.min()) / h))

https://github.com/mwaskom/seaborn/blob/master/seaborn/distributions.py#L24

abschließend

Die Handlung ist nicht schön, weil die Handlung für die Person, der Sie sie zeigen, unhöflich ist Ich finde es höflich, es zumindest sauber zu machen.

Recommended Posts

Stellen Sie die Behälterbreite mit dem Histogramm von Matplotlib und Seaborn klar und ordentlich ein
Passen Sie das Verhältnis mehrerer Zahlen mit der Rasterspezifikation von Matplotlib an
Passen Sie den Abstand zwischen den Figuren mit Matplotlib an
Richten Sie die Größe der Farbleiste an der Matplotlib aus
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
Erhöhen Sie die Schriftgröße des Diagramms mit matplotlib
Füllen Sie die Breite des Jupyter-Notizbuchs, um den Browser zu füllen
Die Basis der Graphentheorie mit Matplotlib-Animation
Visualisieren Sie das Verhalten des Sortieralgorithmus mit matplotlib
Histogramm mit Matplotlib
Fügen Sie mit Matplotlib Informationen am unteren Rand der Abbildung hinzu
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Übersicht und Tipps von Seaborn mit statistischer Datenvisualisierung
Stellen Sie die Achsen mit matplotlib ein
[Grafikzeichnung] Ich habe versucht, ein mehrreihiges Balkendiagramm mit Matplotlib und Seaborn zu schreiben
Animieren Sie die Alpha- und Beta-Werte der weltweit besten Marktwertaktien mit Pandas + Matplotlib
Führen Sie mit Python und Matplotlib eine Isostromanalyse offener Wasserkanäle durch
[Python] Lesen Sie die CSV-Datei und zeigen Sie die Abbildung mit matplotlib an
Sehen Sie, wie schnell Sie mit NumPy / SciPy beschleunigen können
Formatieren Sie die Zeitachse des Pandas-Zeitreihendiagramms mit matplotlib neu
Stellen wir uns die Anzahl der mit Matplotlib mit dem Coronavirus infizierten Personen vor
Ich habe die Grundoperation von matplotlib in Jupyter Lab geschrieben
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
So vereinheitlichen Sie die Behälterbreite, wenn mehrere Histogramme übereinander angezeigt werden (matplotlib)
Vorsichtsmaßnahmen bei der Überlagerung der Wahrscheinlichkeitsdichtefunktion und des Histogramms in matplotlib
Japanische Anzeige von Matplotlib, Seaborn
Verhalten von Matplotlib: Histgramm normiert
Ändern Sie den Stil von matplotlib
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
[Erforderliches Thema DI] Implementieren und verstehen Sie den Mechanismus von DI mit Go
Verbesserung der Wiederverwendbarkeit und Wartbarkeit von mit Luigi erstellten Workflows