Ajouter le ratio cumulatif à l'histogramme maplotlib 2 ~ Utiliser FacetGrid ~

J'ai écrit ici comment superposer la ligne de rapport cumulatif sur pyplot.hist (). Cette fois, je superposerai le rapport cumulatif sur plusieurs histogrammes dessinés en utilisant seaborn.FacetGrid (). Ci-dessous le graphique terminé.

fig_facetgrid.png

Ce que vous faites est le même que ici, mais lorsque vous dessinez un histogramme en utilisant seaborn.FacetGrid () ou seaborn.distplot () , pyplot.hist () ne reçoit pas explicitement les informations de bin et de fréquence comme valeur de retour. Par conséquent, les informations de casier et de fréquence sont extraites de l'objet «ax». Plus précisément, il récupère les informations requises à partir de l'objet patches contenu dans ʻax`. Le code de base est ci-dessous

"""Superposer la ligne du ratio cumulatif sur l'histogramme FacetGrid"""
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)

#Génération de données de jouets
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()Générez plusieurs histogrammes avec
g = sns.FacetGrid(data=df, col='group', hue='group', size=5)
g = g.map(plt.hist, 'x1', alpha=0.7, label='Frequency')


#Tracez une ligne cumulative pour tous les axes contenus dans FacetGrid
for ax in g.axes.ravel():

    #Extraire les patchs
    patches = ax.patches

    #Calculez la valeur du 2ème axe (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:]

    #Calculez la valeur du 2ème axe (y:Accumulation)
    n = [patch.get_height() for patch in patches]
    y2 = np.add.accumulate(n) / sum(n)

    #Graphique du 2ème axe
    ax2 = ax.twinx()
    ax2.plot(x2, y2, ls='--', marker='o', color='r',
                     label='Cumulative ratio')
    ax2.grid(visible=False)


plt.tight_layout()
plt.show()

Le code complet, y compris la légende, est dans Gist. Veuillez vous rendre sur ici.

Recommended Posts

Ajouter le ratio cumulatif à l'histogramme maplotlib 2 ~ Utiliser FacetGrid ~
Ajouter le ratio cumulatif à l'histogramme matplotlib
Ajouter le ratio cumulatif au graphique à barres de matplotlib
[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options