Как автоматически чередовать или циклически изменять линейные стили в регби Seaborn? - PullRequest
1 голос
/ 01 апреля 2019

Я хочу, чтобы мои 21 строка данных на одном графике была более понятной с легендой.Например, возможно, я мог бы сделать так, чтобы каждая запись / строка легенды отображалась тире вместо непрерывной линии.Мое смешанное использование Seaborn и Matplotlib сбивает меня с толку - я не уверен, как получить эти штрихи попеременно.

products = list(data_cleaned.columns)
print('products: \n',products)
for i, product in enumerate(products):
    subset = data_cleaned[data_cleaned[product]>0][product]
    sns.distplot(subset,hist=False,kde=True,kde_kws={'linewidth':3},label=product)
    if i%2 == 0:
        plt.plot(subset,'-', dashes = [8, 4, 2, 4, 2, 4])

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')

Вот мой текущий вывод: enter image description here

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Правильный способ сделать это - использовать велосипед:

# 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')

Now the lines are more easily discerned

1 голос
/ 02 апреля 2019

вы можете указать аргумент линейного стиля в kde_kws = {'linestyle': '-'} в distplot, как вы это делали с linewidth - чередуйте стили линий между '-' и '-' для достижения желаемого эффекта.

пример

import numpy as np; np.random.seed(10)
import seaborn as sns; sns.set(color_codes=True)
mean, cov = [0, 2], [(1, .5), (.5, 1)]
x, y = np.random.multivariate_normal(mean, cov, size=50).T
ax = sns.distplot(x, hist = False, kde=True, kde_kws={'linestyle': '--'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...