带有pandas / matplotlib或seaborn的排序条形图

时间:2015-01-19 10:14:48

标签: python matplotlib pandas 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)我如何绘制最高计数位于顶部(即条形图最顶部的黑色)

2 个答案:

答案 0 :(得分:10)

一个简单的技巧可能是反转绘图的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参数。但我认为在这里使用大熊猫绘图方法更容易。

答案 1 :(得分:1)

如果你想使用pandas,你可以先排序:

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

Seaborn已经为您的pandas情节设计了样式,但您也可以使用:

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