Создание нескольких графиков из фрейма данных с использованием столбцов в качестве значений оси Y (циклически проходя через фрейм данных) - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть фрейм данных, например:

https://i.stack.imgur.com/OKKrz.png

Две категориальные переменные: импульсивность и обработка и несколько зависимых переменных( prot_width и т. Д.).

Мне удалось создать коробочную диаграмму, которая моделирует зависимую переменную с помощью импульсивности и обработки ;

sns.boxplot(x='treatment', y='prot_width', hue='impulsivity',
            palette=['b','r'], data=data)
sns.despine(offset=10, trim=True)

, который приводит график ниже;

https://i.stack.imgur.com/YfXn1.png

Теперь я хочу создать точно такой же график, но для каждой зависимой переменной.Я хочу перебрать каждый столбец зависимых переменных, переименовывая ось Y.

Я искал петли и т. Д., Но не могу понять, как вызывать столбцы и, что более важно, как изменить ось Y во время цикла.

1 Ответ

0 голосов
/ 19 сентября 2018

Просто выполните цикл по столбцам числовых данных, используя DataFrame.columns, который является итеративным объектом, и затем передайте переменную итератора (здесь col ) в y аргумент boxplot.

for col in data.columns[4:len(data.columns)]:
    sns.boxplot(x='treatment', y=col, hue='impulsivity',
                palette=['b','r'], data=data)
    sns.despine(offset=10, trim=True)

    plt.show()

В качестве альтернативы используйте select_dtypes для всех числовых столбцов:

for col in data.select_dtypes(['float', 'int']).columns:
    ...

Или даже filter для пропуска нечисловых столбцов:

for col in data.filter(regex="[^(subject|protrusion|impulsivity|treatment)]").columns:
    ...

Для демонстрации со случайными данными:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

np.random.seed(9192018)
demo_df = pd.DataFrame({'tool': np.random.choice(['pandas', 'r', 'julia', 'sas', 'stata', 'spss'],500),
                        'os': np.random.choice(['windows', 'mac', 'linux'],500), 
                        'prot_width': np.random.randn(500)*100,
                        'prot_length': np.random.uniform(0,1,500),                   
                        'prot_lwr': np.random.randint(100, size=500)
                       }, columns=['tool', 'os', 'prot_width', 'prot_length', 'prot_lwr'])

for col in demo_df.columns[2:len(demo_df.columns)]:
    sns.boxplot(x='tool', y=col, hue='os', palette=['b','r'], data=demo_df)
    sns.despine(offset=10, trim=True)

    plt.legend(loc='center', ncol = 3, bbox_to_anchor=(0.5, 1.10))
    plt.show()
    plt.clf()

plt.close()

Plot Output

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