Морской скрипичный сюжет - сравните все с одним - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть график, подобный представленному ниже в Seaborn docs: https://seaborn.pydata.org/generated/seaborn.violinplot.html

enter image description here

Не возражаем против фактических данных и меток здесьЭто просто для демонстрации. То, что я хотел бы сделать, это создать все оранжевые распределения из одних и тех же данных (в качестве базовой линии).

Таким образом, все синие распределения будут построены по одному и тому же оранжевому распределению для каждого дня недели в этом случае.

Возможно ли это с помощью встроенных функций в Seaborn?

1 Ответ

1 голос
/ 30 сентября 2019

Я не думаю, что есть что-то «встроенное», чтобы делать то, что вы хотите, но это довольно легко сделать, если вы не возражаете быть немного креативным с вашим фреймом данных, но вы должны предоставитьчтобы убедиться в структуре вашего фрейма данных.

Вот (очень неэффективный) способ сделать это с набором данных tips из seaborn

target_var = 'total_bill'
hue_var = 'smoker'
hue_value = 'Yes'
cat_var = 'day'
grouped_value = 'ALL WEEK'

tips = sns.load_dataset("tips")
tips2 = tips.loc[tips[hue_var]==hue_value]
for cat in tips[cat_var].unique():
    temp = tips.loc[:,[target_var]]
    temp[cat_var] = cat
    temp[hue_var] = grouped_value
    tips2 = tips2.append(temp, ignore_index=True, sort=False)

fig, (ax1, ax2) = plt.subplots(1,2, figsize=(10,4))
sns.violinplot(x=cat_var, y=target_var, hue=hue_var, hue_order=['Yes','No'], 
               order=['Thur','Fri','Sat','Sun'],
               data=tips, palette="muted", split=True, ax=ax1)
sns.violinplot(x=cat_var, y=target_var, hue=hue_var, hue_order=[hue_value,grouped_value], 
               order=['Thur','Fri','Sat','Sun'],
               data=tips2, palette="muted", split=True, ax=ax2)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...