Просто выполните цикл по столбцам числовых данных, используя 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](https://i.stack.imgur.com/mr2BC.png)