2017-01-10 1 views
4

Я хотел бы объединить этот скрипичный сюжет http://seaborn.pydata.org/generated/seaborn.violinplot.html (четвертый пример с split = True) с этим http://seaborn.pydata.org/examples/elaborate_violinplot.html.Море, скрипичный сюжет с одной информацией за столбец

На самом деле, у меня есть dataFrame со столбцом Success (да или нет) и несколькими столбцами данных. Например:

df = pd.DataFrame(
    {"Success": 50 * ["Yes"] + 50 * ["No"], 
    "A": np.random.randint(1, 7, 100), 
    "B": np.random.randint(1, 7, 100)} 
) 

    A B Success 
0 6 4  Yes 
1 6 2  Yes 
2 1 1  Yes 
3 1 2  Yes 
.. .. ..  ... 
95 4 4  No 
96 2 1  No 
97 2 6  No 
98 2 3  No 
99 2 1  No 

Я хотел бы построить график скрипки для каждого столбца данных. Он работает с:

import seaborn as sns 
sns.violinplot(data=df[["A", "B"]], inner="quartile", bw=.15) 

Но теперь, я хотел бы разделить на скрипку по Success колонку. Но, используя hue="Success", я получил ошибку с Cannot use 'hue' without 'x' or 'y'. Итак, как я могу сделать, чтобы построить график скрипки, разбившись по столбцу «Успех»?

ответ

8

Если правильно понимаю ваш вопрос, вы должны изменить свой dataframe, чтобы иметь его в длинном формате:

df = pd.melt(df, value_vars=['A', 'B'], id_vars='Success') 
sns.violinplot(x='variable', y='value', hue='Success', data=df) 
plt.show() 

enter image description here

+0

Это то, что я искал. благодаря – Ger

0

я смог адаптировать example скрипичного участка над DataFrame так:

df = pd.DataFrame({"Success": 50 * ["Yes"] + 50 * ["No"], 
        "A": np.random.randint(1, 7, 100), 
        "B": np.random.randint(1, 7, 100)}) 
sns.violinplot(df.A, df.B, df.Success, inner="quartile", split=True) 
sns.plt.show() 

Seaborn violin graph over Pandas DataFrame

Очевидно, что он все еще нуждается в некоторой работе: А шкала должна быть размера, чтобы уместить например, одна полуструнная скрипка.

Смежные вопросы