Cómo llenar el área bajo la curva en la plot de distribución marítima

Tengo dos variables

x = [1.883830, 7.692308,8.791209, 9.262166] y = [5.337520, 4.866562, 2.825746, 6.122449] 

Y quiero ajustarme a una distribución gaussiana usando el envoltorio marino para matplotlib. Parece que la función sns.distplot es la mejor manera de hacer esto, pero no puedo encontrar la forma de completar el área debajo de la curva. ¿Ayuda?

 fig, ax = plt.subplots(1) sns.distplot(x,kde_kws={"shade":True}, kde=False, fit=stats.gamma, hist=None, color="red", label="2016", fit_kws={'color':'red'}); sns.distplot(y,kde_kws={"shade":True}, kde=False, fit=stats.gamma, hist=None, color="blue", label="2017", fit_kws={'color':'blue'}) 

Creo que el argumento de “sombra” podría ser parte del argumento fit_kws pero no he conseguido que esto funcione.

Otra opción sería usar ax.fill() ?

Sí, el argumento de shade no es compatible para fit_kws diferencia de kde_kws . Pero como ha adivinado, podemos rellenar el área debajo de las dos curvas usando ax.fill_between() . Tendremos que obtener las líneas del objeto ax y sus datos xy y luego usarlas para rellenar el área bajo las curvas. Aquí hay un ejemplo.

 import numpy as np import seaborn as sns import scipy.stats as stats import matplotlib.pyplot as plt x = [1.883830, 7.692308,8.791209, 9.262166] y = [5.337520, 4.866562, 2.825746, 6.122449] ax = sns.distplot(x, fit_kws={"color":"red"}, kde=False, fit=stats.gamma, hist=None, label="label 1"); ax = sns.distplot(y, fit_kws={"color":"blue"}, kde=False, fit=stats.gamma, hist=None, label="label 2"); # Get the two lines from the axes to generate shading l1 = ax.lines[0] l2 = ax.lines[1] # Get the xy data from the lines so that we can shade x1 = l1.get_xydata()[:,0] y1 = l1.get_xydata()[:,1] x2 = l2.get_xydata()[:,0] y2 = l2.get_xydata()[:,1] ax.fill_between(x1,y1, color="red", alpha=0.3) ax.fill_between(x2,y2, color="blue", alpha=0.3) plt.show(block=False) 

El resultado se muestra a continuación: introduzca la descripción de la imagen aquí