I have a DataFrame df
:
df = pd.DataFrame(columns=["App","Feature1", "Feature2","Feature3", "Feature4","Feature5", "Feature6","Feature7","Feature8"], data=[['SHA', 0, 0, 1, 1, 1, 0, 1, 0], ['LHA', 1, 0, 1, 1, 0, 1, 1, 0], ['DRA', 0, 0, 0, 0, 0, 0, 1, 0], ['FRA', 1, 0, 1, 1, 1, 0, 1, 1], ['BRU', 0, 0, 1, 0, 1, 0, 0, 0], ['PAR', 0, 1, 1, 1, 1, 0, 1, 0], ['AER', 0, 0, 1, 1, 0, 1, 1, 0], ['SHE', 0, 0, 0, 1, 0, 0, 1, 0]])
# display(df)
App Feature1 Feature2 Feature3 Feature4 Feature5 Feature6 Feature7 Feature8
0 SHA 0 0 1 1 1 0 1 0
1 LHA 1 0 1 1 0 1 1 0
2 DRA 0 0 0 0 0 0 1 0
3 FRA 1 0 1 1 1 0 1 1
4 BRU 0 0 1 0 1 0 0 0
5 PAR 0 1 1 1 1 0 1 0
6 AER 0 0 1 1 0 1 1 0
7 SHE 0 0 0 1 0 0 1 0
I want to create a stacked bar chart so that each stack would correspond to App
while the Y axis would contain the count of 1
values and the X axis would be Feature
.
It should be similar to this bar chart with the only difference that now I want to see stack bars and a legend with colors:
df_c = df.iloc[:, 1:].eq(1).sum().rename_axis('Feature').reset_index(name='Count')
df_c = df_c.sort_values('Count')
plt.figure(figsize=(12,8))
ax = sns.barplot(x="Feature", y='Count', data=df_c, palette=sns.color_palette("GnBu", 10))
plt.xticks(rotation='vertical')
ax.grid(b=True, which='major', color='#d3d3d3', linewidth=1.0)
ax.grid(b=True, which='minor', color='#d3d3d3', linewidth=0.5)
plt.show()