Как с помощью seaborn (catplot или barplot) на одном графике отобразить значение нескольких?

Как с помощью seaborn (catplot или barplot) на одном графике отобразить значение нескольких столбцов DataFrame? Ниже приведен не рабочий код. Он корректно отображает график только для одного столбца, а нужно чтобы отображал несколько столбцов, как приведено ниже на примере.

import pandas as pd 
import matplotlib.pyplot as plt
import seaborn as sns 

sns.set()



c1 = [0.3, 0.5, 0, 0.9] 
c2 = [0.7, 0, 0.1, 0]
dct = {'c1':c1, 'c2':c2}
df = pd.DataFrame(dct)
print(df)

sns.barplot(x=df.index.values, y='c1', data=df)
#sns.barplot(x=df.index.values, y='c2', data=df)
plt.show()

Желаемый график

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


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

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

Примерный вариант. Наверное, можно ещё как-то красивше, но пока не придумал:

df1 = df.stack().reset_index(level=1)
df1.columns = ['c', 'value']
sns.barplot(x=df1.index.values, y='value', hue='c', data=df1)
plt.show()

sns-plot

То есть нужно сделать такой DataFrame, чтобы можно было через hue разделить столбцы на c1 и c2. В df1 у меня при этом получилось следующее:

    c   value
0   c1  0.3
0   c2  0.7
1   c1  0.5
1   c2  0.0
2   c1  0.0
2   c2  0.1
3   c1  0.9
3   c2  0.0
→ Ссылка
Автор решения: CrazyElf

Кстати, если Seaborn - это не обязательное условие, то всё вообще просто:

df.plot(kind='bar');
# или df.plot.bar();

df-plot

→ Ссылка