50の機能を備えた5000の製品のデータセットがあります。列の1つは「色」であり、列には100を超える色があります。棒グラフをプロットして、上位10色と、各色に含まれる製品の数のみを表示しようとしています。
top_colors = df.colors.value_counts()
top_colors[:10].plot(kind='barh')
plt.xlabel('No. of Products');
Seabornの使用:
sns.factorplot("colors", data=df , palette="PuBu_d");
1)これを行うためのより良い方法はありますか?
2)Seabornでこれを複製するにはどうすればよいですか?
3)最大数が一番上になるようにプロットするにはどうすればよいですか(つまり、棒グラフの一番上にある黒)
簡単なトリックは、データをいじくり回すのではなく、プロットの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()
Seaborn barplot
は現在、水平方向のバーをサポートしていませんが、バーが表示される順序を制御する場合は、値のリストをx_order
パラメーターに渡すことができます。しかし、とにかく、ここではpandasプロットメソッドを使用する方が簡単だと思います。
pandasを使用する場合は、最初に次のように並べ替えることができます。
top_colors[:10].sort(ascending=0).plot(kind='barh')
Seabornはすでにpandasプロットのスタイルを設定していますが、次のものを使用することもできます。
sns.barplot(top_colors.index, top_colors.values)