Правильный способ сделать это - использовать велосипед:
# added this:
from itertools import cycle
ls = ['-','--',':','-.','-','--',':','-.','-','--',':','-.','-','--',':','-.','-','--',':','-.','-','--',':','-.']
linecycler = cycle(ls)
products = list(data_cleaned.columns)
print('products: \n',products)
for i, product in enumerate(products):
subset = data_cleaned[data_cleaned[product]>0][product]
ax = sns.distplot(subset,hist=False,kde=True,kde_kws={'linewidth':3,'linestyle':next(linecycler)},label=product)
# loop through next(linecycler)
sns.set(rc = {'figure.figsize':(25,10)})
#sns.palplot()
palette_to_use = sns.color_palette("hls", 21)
sns.set_palette(palette_to_use)
#cmap = ListedColormap(sns.color_palette().as_hex())
plt.legend(prop={'size': 16}, title = 'Product')
plt.title('Density Plot with Multiple Products')
plt.xlabel('log10 of monthly spend')
plt.ylabel('Density')