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