如何使用Python在条形图中表示二维分类数据

Nipuna Dilhara:

我有一个包含列的数据集:“月”,“类别”和“利润”。我使用以下方法来查找每个月和每个类别的“盈利能力”总和。

q1=df.groupby(['Month','Category'])['Profitability'].sum()

这是我得到的结果。

Month  Category   
1      Cosmetics       2685.9000
       First Aid       2128.0200
       Magazine         703.8900
       Supplements    37005.6200
       Toiletries      1893.0600
2      Cosmetics       2569.0600
       First Aid       3282.7850
       Magazine         679.1100
       Supplements    36647.8800
       Toiletries      1357.7500
3      Cosmetics       1350.7925
       First Aid       2238.3100
       Magazine         371.1200
       Supplements    21444.0900
       Toiletries      1226.1600

我想用条形图表示它们。可视化这些分类数据的最佳方法是什么?

Valdi_Bo:

准备步骤是将具有单个列和MultiIndex的DataFrame转换为具有“普通”索引和每个类别单独的的DataFrame

df2 = df.Profitability.unstack()

或者,如果您的数据源是Series(而不是DataFrame),则运行:

df2 = q1.unstack()

结果更适合作为图形来源:

Category  Cosmetics  First Aid  Magazine  Supplements  Toiletries
Month                                                            
1         2685.9000   2128.020    703.89     37005.62     1893.06
2         2569.0600   3282.785    679.11     36647.88     1357.75
3         1350.7925   2238.310    371.12     21444.09     1226.16

绘制数字,基本方法是采用y轴的线性比例。绘制它的代码是:

ax = df2.plot.bar(rot=0)
ax.get_figure().suptitle(t='Profitability', fontsize=20)
ax.legend(bbox_to_anchor=(1.35, 1.0));

最后一条指令将图例向右“移动”(与默认位置相比),否则它将使某些条形变得模糊(尝试在不使用该指令的情况下进行绘制)。

结果是:

在此处输入图片说明

但是请注意,与其他类别相比,“ 辅助”的条形非常高。

这就是为什么我基于y轴的刻度提出第二个解决方案的原因

ax = df2.plot.bar(rot=0, logy=True)
ax.get_figure().suptitle(t='Profitability', fontsize=20)
ax.legend(bbox_to_anchor=(1.1, 1.0))
yTicks = [1000, 3000, 10000, 30000]
yTickLabels = [ f'{i:,}' for i in yTicks ]
ax.set_yticks(yTicks)
ax.set_yticklabels(yTickLabels);

最后4条指令更改了y轴上的默认刻度,因为我认为它们比默认刻度更具可读性(尝试绘制没有这4条线的图形进行比较)。

结果是:

在此处输入图片说明

现在,条的高度很容易比较,并且大约在tick(n-1)* 3的基础上选择y刻度

编辑

如果您希望图例带有标题,请title='Category'ax.legend(...)指令中添加参数,无论选择哪种上述解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Matlab中针对单个轴在单个条形图中表示多个值?

如何在填充的条形图中表示变量的百分比?

尝试在条形图中表示主题标签

如何在协议缓冲区中表示二维数组?

如何在TypeScript中表示包含多个类型的二维数组?

使用python可视化条形图中的数据

使用二维矩阵来表示数据

条形图中的Power BI分类数据计数

Python:如何使用 Matplotlib 在条形图中垂直放置文本

如何使用二维数组存储数据

二维图中数据的彩色编码表示(在MATLAB中)

如何使用Matlab / Python在平面图上绘制二维导航数据点?

如何使用分类变量(加上边缘)绘制二维图表

条形图中的分类标签部分隐藏

如何使用分类数据显示包含重复值的排序条形图

如何在 R 中使用分类变量在堆积条形图上放置数据标签?

如何使用 ggplot2 在一个图中绘制二维数组的行?

如何获得分类数据的分组条形图

如何对二维数组使用追加?

如何在二维图中绘制3轴信息?

如何在python中使用numpy和matplotlib为二维数据绘制最大和最小的特征向量?

转置(翻转)PHP中表示为二维数组的矩阵

连续到分类二维数组

如何在MVC C#中使用Ajax调用在条形图中绑定动态数据?

如何使用R添加条形图中没有数据的垃圾箱?

如何使用带有“ group_by”数据帧的plot()在条形图中显示每个变量的值?

如何将多组数据放入单个条形图中?

如何在JFreeChart条形图中更新数据集

如何使用一维卷积完成二维卷积?