Сортированные гистограммы с пандами / matplotlib или seaborn

у меня есть набор данных из 5000 продуктов с 50 характеристики. Один из столбцов - "цвета", и в столбце более 100 цветов. Я пытаюсь построить гистограмму, чтобы показать только верхние 10 цветов и сколько продуктов есть в каждом цвете.

top_colors = df.colors.value_counts()
top_colors[:10].plot(kind='barh')
plt.xlabel('No. of Products');

Pandas Plot

Использование Seaborn:

sns.factorplot("colors", data=df , palette="PuBu_d");

Seaborn

1) Есть ли лучший способ сделать это?

2) Как я могу повторить это с Seaborn?

3) Как сделать я строю так, что самый высокий граф находится наверху (i.e черный в самом верху гистограммы)

2 ответов


простой трюк может быть инвертировать ось y вашего сюжета, а не futzing с данными:

s = pd.Series(np.random.choice(list(string.uppercase), 1000))
counts = s.value_counts()
ax = counts.iloc[:10].plot(kind="barh")
ax.invert_yaxis()

enter image description here

Сиборн barplot в настоящее время не поддерживает горизонтально ориентированные бары, но если вы хотите контролировать порядок появления баров, вы можете передать список значений в x_order парам. Но я думаю, что здесь проще использовать методы заговора панд.


Если вы хотите использовать панд, то вы можете сначала сортировать:

top_colors[:10].sort(ascending=0).plot(kind='barh')

Seaborn уже стили ваших панд участков, но вы также можете использовать:

sns.barplot(top_colors.index, top_colors.values)