Python >> Tutoriel Python >  >> Python Tag >> Seaborn

seaborn :la bande passante KDE sélectionnée est 0. Impossible d'estimer la densité

Ce qui se passe ici, c'est que Seaborn (ou plutôt la bibliothèque sur laquelle il s'appuie pour calculer le KDE - scipy ou statsmodels) ne parvient pas à déterminer la "bande passante", un paramètre de mise à l'échelle utilisé dans le calcul. Vous pouvez le passer manuellement. J'ai joué avec quelques valeurs et j'ai trouvé que 1,5 donnait un graphique à la même échelle que votre précédent :

sns.kdeplot(ser_test, cumulative=True, bw=1.5)

Voir aussi ici. Vaut la peine d'installer statsmodels si vous ne l'avez pas.


si vous ne voulez pas attendre que la mise à jour de seaborn git soit publiée dans une version stable, vous pouvez essayer l'une des solutions de la page du problème. spécifiquement la suggestion de henrymartin1 d'essayer de passer manuellement dans une petite bande passante à l'intérieur d'un bloc try/catch (suggéré par ahartikainen) qui récupère le texte de cette erreur spécifique (ainsi d'autres erreurs sont toujours générées) :

try:
    sns.distplot(df)
except RuntimeError as re:
    if str(re).startswith("Selected KDE bandwidth is 0. Cannot estimate density."):
        sns.distplot(df, kde_kws={'bw': 0.1})
    else:
        raise re

Cela a fonctionné pour moi.


vous avez trois options à essayer

d'abord :afficher les blocs KDE avec les paramètres par défaut

sns.distplot(ser_test, hist = False, rug = True, rug_kws = {'color' : 'r'})

second :KDE avec une bande passante étroite pour afficher les blocs de probabilité individuels

sns.distplot(ser_test, hist = False, rug = True, rug_kws = {'color' : 'r'}, kde_kws = {'bw' : 1})

troisièmement :choisir une fonction de noyau triangulaire différente (forme de bloc)

sns.distplot(ser_test, hist = False, rug = True, rug_kws = {'color' : 'r'}, kde_kws = {'bw' : 1.5, 'kernel' : 'tri'})