Постройте несколько коробочных графиков из сиборна с оттенком

#pandas #seaborn #boxplot

Вопрос:

У меня есть фрейм данных с тремя столбцами

 df=pd.DataFrame(data = {'Dose1': [1,2,3,4,5], 'Dose2': [6,6,4,7,4],'SickOrNot':[True,False,True,True,False]})
 

Последняя колонка соответствует тому, оставался ли пациент больным или нет, а первые две колонки-это дозы двух лекарств, введенных пациенту. Я хочу создать две пары графиков (в сиборне) доз, используя в качестве оттенка, был ли пациент болен или нет.

Итак, по сути, я хочу, чтобы ось x имела две секции (Доза 1, Доза 2), каждая секция которых содержит две диаграммы. Так что мои последние четыре графика-это график дозы 1 больных пациентов, дозы 1 не больных пациентов, дозы 2 больных пациентов, дозы 2 не больных пациентов.

Какой синтаксис я бы использовал для этого? Я пытался установить оттенок «больной или нет», но я очень смущен тем, что следует устанавливать в качестве значений x и y при вызове sns.boxplot .

Ответ №1:

Преобразуйте данные в длинную форму таким образом, чтобы каждый столбец был одной переменной, а каждая строка-одним наблюдением. В этом случае Dose1 и Dose2 должны быть объединены в одну колонку, например Section .

melt() данные с SickOrNot идентификатором и Dose1 и Dose2 в качестве значений. Затем установите SickOrNot в качестве сюжета hue :

 sns.boxplot(
    data=df.melt(id_vars=['SickOrNot'], value_vars=['Dose1', 'Dose2'],
                 var_name='Section', value_name='Dosage'),
    x='Section',
    y='Dosage',
    hue='SickOrNot',
)
 

участок коробки после плавления