Graficando un dataframe como ‘hist’ y ‘kde’ en el mismo gráfico

Tengo un dataframe pandas con información del usuario. Me gustaría trazar la edad de los usuarios como kind='kde' y en kind='hist' en la misma ttwig. En este momento puedo tener las dos plots separadas. El dataframe se asemeja a:

 member_df= user_id Age 1 23 2 34 3 63 4 18 5 53 ... 

utilizando

 ax1 = plt.subplot2grid((2,3), (0,0)) member_df.Age.plot(kind='kde', xlim=[16, 100]) ax1.set_xlabel('Age') ax2 = plt.subplot2grid((2,3), (0,1)) member_df.Age.plot(kind='hist', bins=40) ax2.set_xlabel('Age') ax3 = ... 

Entiendo que kind='kde' me dará frecuencias para el eje y, mientras que kind='kde' dará una distribución acumulativa, pero ¿hay alguna forma de combinar ambas y hacer que el eje y esté representado por las frecuencias?

pd.DataFrame.plot() devuelve el ax que está trazando. Puedes reutilizar esto para otras plots.

Tratar:

 ax = member_df.Age.plot(kind='kde') member_df.Age.plot(kind='hist', bins=40, ax=ax) ax.set_xlabel('Age') 

ejemplo
hist primero para poner en el fondo
Además, puse kde en el eje secondary_y

 import pandas as pd import numpy as np np.random.seed([3,1415]) df = pd.DataFrame(np.random.randn(100, 2), columns=list('ab')) ax = df.a.plot(kind='hist') df.a.plot(kind='kde', ax=ax, secondary_y=True) 

introduzca la descripción de la imagen aquí


respuesta al comentario
utilizando subplot2grid . solo reutiliza ax1

 import pandas as pd import numpy as np ax1 = plt.subplot2grid((2,3), (0,0)) np.random.seed([3,1415]) df = pd.DataFrame(np.random.randn(100, 2), columns=list('ab')) df.a.plot(kind='hist', ax=ax1) df.a.plot(kind='kde', ax=ax1, secondary_y=True) 

introduzca la descripción de la imagen aquí

En caso de que lo desee para todas las columnas de su dataframe:

 fig, ax = plt.subplots(8,3, figsize=(20, 50)) # you can change the distribution, I had 22 columns, so 8x3 is fine to me fig.subplots_adjust(hspace = .2, wspace=.2, ) ax = ax.ravel() for i in range(len(I_df.columns)): ax[i] = I_df.iloc[:,i].plot(kind='hist', ax=ax[i]) ax[i] = I_df.iloc[:,i].plot(kind='kde', ax=ax[i], secondary_y=True) plt.title(I_df.columns[i]) 

Espero que ayude 🙂

Es mejor e incluso más sencillo utilizar seaborn.displot . Las soluciones propuestas anteriormente hicieron que KDE parezca un poco “mejorado” para mí. seaborn.distplot alinea con precisión los ceros entre los gráficos hist y kde.
import seaborn as sns sns.displot(df.a)