[PYTHON] Add kumulatives Verhältnis zum Maplotlib-Histogramm 2 ~ Verwenden Sie FacetGrid ~

Ich habe hier geschrieben, wie man die kumulative Verhältnislinie auf "pyplot.hist ()" überlagert. Dieses Mal werde ich das kumulative Verhältnis auf mehrere Histogramme legen, die mit seaborn.FacetGrid () erstellt wurden. Unten ist das fertige Grundstück.

fig_facetgrid.png

Was Sie tun, ist dasselbe wie hier, aber wenn Sie ein Histogramm mit seaborn.FacetGrid () oder seaborn.distplot () zeichnen , pyplot.hist () empfängt keine expliziten Bin- und Frequenzinformationen als Rückgabewert. Daher werden die Bin- und Frequenzinformationen aus dem "ax" -Objekt extrahiert. Insbesondere werden die erforderlichen Informationen aus dem in "ax" enthaltenen "Patches" -Objekt abgerufen. Der Basiscode ist unten

"""Überlagern Sie die Linie des kumulativen Verhältnisses im FacetGrid-Histogramm"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# % matplotlib inline
sns.set(style="darkgrid", palette="muted", color_codes=True)

#Generierung von Spielzeugdaten
np.random.seed(0)

size = 200
x1 = np.random.normal(size=size)
group = np.random.choice((0, 1), size=size)
df = pd.DataFrame({'x1': x1, 'group': group})

# seaborn.FacetGrid()Generieren Sie mehrere Histogramme mit
g = sns.FacetGrid(data=df, col='group', hue='group', size=5)
g = g.map(plt.hist, 'x1', alpha=0.7, label='Frequency')


#Zeichnen Sie eine kumulative Linie für alle in FacetGrid enthaltenen Axt
for ax in g.axes.ravel():

    #Patches extrahieren
    patches = ax.patches

    #Berechnen Sie den Wert der 2. Achse (x)
    bins_part = [patch.get_xy()[0] + patch.get_width() for patch in patches]
    bins = [patches[0].get_xy()[0]] + bins_part
    x2 = np.convolve(bins, np.ones(2) / 2, mode="same")[1:]

    #Berechnen Sie den Wert der 2. Achse (y:Akkumulation)
    n = [patch.get_height() for patch in patches]
    y2 = np.add.accumulate(n) / sum(n)

    #Diagramm der 2. Achse
    ax2 = ax.twinx()
    ax2.plot(x2, y2, ls='--', marker='o', color='r',
                     label='Cumulative ratio')
    ax2.grid(visible=False)


plt.tight_layout()
plt.show()

Der vollständige Code, einschließlich der Legende, befindet sich in Gist. Bitte gehen Sie zu hier.

Recommended Posts

Add kumulatives Verhältnis zum Maplotlib-Histogramm 2 ~ Verwenden Sie FacetGrid ~
Fügen Sie dem Matplotlib-Histogramm ein kumulatives Verhältnis hinzu
Fügen Sie dem Balkendiagramm von matplotlib ein kumulatives Verhältnis hinzu
[Python] [Django] Verwendung des Auswahlfelds und Hinzufügen von Optionen