Подтвердить что ты не робот

Как создать сложную гистограмму для моего DataFrame с использованием морского дерева?

У меня есть 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]])

Я хочу создать сложную гистограмму, чтобы каждый стек соответствовал App то время как ось Y будет содержать количество 1 значений, а ось X будет Feature.

Он должен быть похож на эту гистограмму с той лишь разницей, что теперь я хочу видеть стековые бары и легенду с цветами:

df_c = df.iloc[:, 1:].eq(1).sum().rename_axis('Feature').reset_index(name='Cou‌​nt')
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()
4b9b3361

Ответ 1

Вы можете использовать сюжет с пандами, как @Bharath предлагает:

import seaborn as sns
sns.set()
df.set_index('App').T.plot(kind='bar', stacked=True)

Выход:

enter image description here

Обновлено:

из matplotlib.colors импортировать ListedColormap   df.set_index ( 'App') \     .reindex_axis (df.set_index ('App'). sum(). sort_values (). index, axis = 1) \     .T.plot(kind = 'bar', stacked = True,             colormap = ListedColormap (sns.color_palette ("GnBu", 10)),             figsize = (12,6))

Обновлены Pandas 0.21. 0+ reindex_axis устарела, используйте reindex

from matplotlib.colors import ListedColormap

df.set_index('App')\
  .reindex(df.set_index('App').sum().sort_values().index, axis=1)\
  .T.plot(kind='bar', stacked=True,
          colormap=ListedColormap(sns.color_palette("GnBu", 10)), 
          figsize=(12,6))

Выход:

enter image description here