seaborn: Selected KDE bandwidth is 0. Cannot estimate density seaborn: Selected KDE bandwidth is 0. Cannot estimate density pandas pandas

seaborn: Selected KDE bandwidth is 0. Cannot estimate density


What's going on here is that Seaborn (or rather, the library it relies on to calculate the KDE - scipy or statsmodels) isn't managing to figure out the "bandwidth", a scaling parameter used in the calculation. You can pass it manually. I played with a few values and found 1.5 gave a graph at the same scale as your previous:

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

See also here. Worth installing statsmodels if you don't have it.


if you don't want to wait for the seaborn git update to get released in a stable version, you can try one of the solutions in the issue page. specifically henrymartin1's suggestion to try manually passing in a small bandwidth inside a try/catch block (suggested by ahartikainen) which grabs the text of this specific error (so other errors still get raised):

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

This worked for me.


you have three options to try

first: showing KDE lumps with the default settings

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

second: KDE with narrow bandwidth to show individual probability lumps

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

third: choosing a different, triangular kernel function (lump shape)

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