Как создать штабелированную гистограмму для моего фрейма данных с помощью seaborn? [дубликат]
этот вопрос уже есть ответ здесь:
у меня есть фрейм данных 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='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()
1 ответов
вы можете использовать сюжет панды, как @Bharath предлагают:
import seaborn as sns
sns.set()
df.set_index('App').T.plot(kind='bar', stacked=True)
выход:
обновление:
из библиотек matplotlib.импорт цветов ListedColormap
пеленгатор.set_index ('App')\
.reindex_axis(df.set_index ('App').сумма.)(sort_values().индекс, оси=1)\
.Участок т.(бар роде='' наборный=истина,
colormap=ListedColormap (sns.color_palette ("GnBu", 10)),
figsize=(12,6))
Обновление Панды 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))
выход: