Цикл для построения boxplot

У меня есть фрейм данных, на основе которого по каждой характериститке я хочу построить боксплоты. Столбец [Сфера] - это факторная переменная, ось x в боксплоте. Когда я пытаюсь построить боксплот по любому конкретному столбцу- все получается отлично и без проблем. Но когда запускаю цикл, чтоб автоматические строить боксплоты по всем имеющимся стобцам, выходит ошибка.

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
    
    
df = pd.read_excel('Датафрейм по всей сфере, размеченный.xlsx', sheet_name='Все')
    
for col in df.columns:
   plt.figure(figsize=(16, 8))
   x = df['Сфера']
   y = df[col]
   plt.subplots_adjust(bottom=0.25, top=0.79)
   ax = sns.boxplot( x, y)
   plt.xticks(rotation=80)
   plt.draw()
   plt.savefig()

ValueError: Neither the x nor y variable appears to be numeric.

Очевидно, я упускаю что-то важное, но не могу понять что. Помогите, пожалуйста. Что мне исправить, чтобы боксплоты автоматически строились в цикле по каждому столбцу [Характеристика_n], а факторной переменной при этом для каждого случая оставался столбец [Сфера]

+-------------------+------------------+------------------+------------------+------------------+------------------+
|       Сфера       | Характеристика_1 | Характеристика_2 | Характеристика_3 | Характеристика_4 | Характеристика_5 |
+-------------------+------------------+------------------+------------------+------------------+------------------+
| Все услуги        |               17 |               22 |               17 |               21 |               17 |
| Все услуги        |               36 |               40 |               16 |                4 |               24 |
| Все услуги        |               20 |               28 |               22 |               18 |               30 |
| Все услуги        |               34 |               36 |               10 |                8 |               20 |
| Регитстрирование  |               17 |               29 |               22 |               23 |               24 |
| Регитстрирование  |               28 |               20 |               26 |               12 |               16 |
| Перераспределение |               22 |               28 |               24 |               14 |               12 |
| Перераспределение |               25 |               35 |               35 |               21 |               17 |
| Все услуги        |               23 |               26 |               28 |               17 |               22 |
| Регитстрирование  |               27 |               27 |               31 |               16 |               12 |
| Все услуги        |               29 |               39 |               32 |               23 |               22 |
| Регитстрирование  |               26 |               29 |               20 |               15 |               24 |
| Регитстрирование  |               24 |               29 |               16 |               15 |               14 |
| Консультирование  |               40 |               28 |               28 |               32 |               18 |
| Профессиональные  |               20 |               30 |                6 |                6 |               17 |
| Профессиональные  |               24 |               23 |               19 |               15 |               15 |
| Профессиональные  |               25 |               28 |               17 |               18 |               17 |
| Профессиональные  |               15 |               16 |               12 |                3 |               18 |
| Консультирование  |               20 |               19 |               20 |               16 |               24 |
| Перераспределение |               40 |               36 |               12 |                8 |               20 |
| Консультирование  |               28 |               18 |               24 |               17 |               18 |
| Консультирование  |               28 |               20 |               32 |                8 |               12 |
| Перераспределение |               25 |               27 |               15 |               17 |               22 |
| Перераспределение |               24 |               36 |               20 |               16 |                4 |
| Перераспределение |               23 |               22 |               29 |               18 |               24 |
| Консультирование  |               20 |               28 |               24 |                8 |               24 |
| Консультирование  |               30 |               28 |               22 |               21 |               20 |
| Консультирование  |               38 |               12 |               22 |                4 |               31 |
| Консультирование  |               20 |               12 |               24 |                8 |               12 |
| Консультирование  |               30 |               24 |               24 |               20 |               29 |
| Консультирование  |               24 |               32 |               19 |               13 |               32 |
| Все услуги        |               35 |               34 |               17 |               14 |               14 |
| Все услуги        |               25 |               29 |               31 |               23 |               16 |
| Все услуги        |               36 |               33 |               28 |               18 |               18 |
| Все услуги        |               33 |               36 |               20 |               13 |                7 |
| Все услуги        |               27 |               21 |               26 |               17 |               26 |
+-------------------+------------------+------------------+------------------+------------------+------------------+

Ответы (2 шт):

Автор решения: Io Io

В общем, получилось сделать вот так. Не знаю, насколько это верно

df = pd.read_excel('Датафрейм по всей сфере, размеченный.xlsx', sheet_name='Все', index_col=0)

for col in df.columns:
    plt.figure(figsize=(16, 8))
    x = df.index
    y = df[col]
    plt.subplots_adjust(bottom=0.25, top=0.79)
    ax = sns.boxplot(x, y)
    plt.xticks(rotation=80)
    plt.show()
→ Ссылка
Автор решения: passant

Не могу понять, что именно вам надо и что не выходит, но именно boхplot по столбцам Датафрейма строится на много проще:

df = pd.DataFrame(np.random.randn(20, 3),
                  columns=['Cl1', 'Cl2', 'Cl3'])
df.boxplot(column=['Cl1', 'Cl2', 'Cl3'])

введите сюда описание изображения

А если по строкам - то вот так:

df['Сфера'] = pd.Series(['A', 'A', 'A', 'A', 'A',
                     'B', 'B', 'B', 'B', 'B', 
                     'C', 'C', 'B', 'B', 'D',
                     'D', 'D', 'A', 'B', 'C'])
boxplot = df.boxplot(column=['Cl1','Cl2', 'Cl3'], by='Сфера')

введите сюда описание изображения

→ Ссылка