使用 pandas/matplotlib 或 seaborn 排序的条形图

Posted

技术标签:

【中文标题】使用 pandas/matplotlib 或 seaborn 排序的条形图【英文标题】:Sorted bar charts with pandas/matplotlib or seaborn 【发布时间】:2015-03-17 07:36:06 【问题描述】:

我有一个包含 5000 种产品和 50 项功能的数据集。其中一列是“颜色”,该列中有 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)我如何绘制使得最高计数位于顶部(即条形图最顶部的黑色)

【问题讨论】:

seaborn 文档中的示例:seaborn.pydata.org/examples/horizontal_barplot.html 【参考方案1】:

一个简单的技巧可能是反转你的绘图的 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 绘图方法更容易。

【讨论】:

【参考方案2】:

如果你想用pandas那么你可以先排序:

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

Seaborn 已经为您的熊猫图设置了样式,但您也可以使用:

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

【讨论】:

谢谢。为了澄清,颜色是其中的一列。因此,您的答案将绘制整个数据集,而不仅仅是颜色列。试过 df.colors[:10].sort(ascending=0).plot(kind='barh'),没用。 Seaborn 也一样。有什么想法吗? 得到错误:“AttributeError: 'NoneType' 对象没有属性 'plot'”。 Seaborn 在这种情况下似乎不起作用。 谢谢,我解决了。 top_colors.sort() top_colors[-10:].plot(kind='barh')

以上是关于使用 pandas/matplotlib 或 seaborn 排序的条形图的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas/matplotlib/python,我无法将我的 csv 文件可视化为集群

在 pandas/matplotlib 中为图形标题拉取数据框名称

numpy pandas matplotlib

11-2 numpy/pandas/matplotlib模块

Pandas、matplotlib 和 plotly - 如何修复系列图例?

Numpy,Pandas,Matplotlib