web-dev-qa-db-ja.com

pandas / matplotlibまたはseabornを使用して並べ替えられた棒グラフ

50の機能を備えた5000の製品のデータセットがあります。列の1つは「色」であり、列には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)最大数が一番上になるようにプロットするにはどうすればよいですか(つまり、棒グラフの一番上にある黒)

8
ananuc

簡単なトリックは、データをいじくり回すのではなく、プロットのy軸を反転することかもしれません。

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

Seaborn barplotは現在、水平方向のバーをサポートしていませんが、バーが表示される順序を制御する場合は、値のリストをx_orderパラメーターに渡すことができます。しかし、とにかく、ここではpandasプロットメソッドを使用する方が簡単だと思います。

11
mwaskom

pandasを使用する場合は、最初に次のように並べ替えることができます。

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

Seabornはすでにpandasプロットのスタイルを設定していますが、次のものを使用することもできます。

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