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.
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])
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()
#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()
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
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.