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

2024-09-30 01:25:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含列的数据集:“月份”、“类别”和“盈利能力”。我使用下面的方法来计算每个月和类别的“盈利能力”总和

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

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


Tags: 数据方法能力类别firstcategory月份总和
1条回答
网友
1楼 · 发布于 2024-09-30 01:25:51

准备步骤是使用单个列转换数据帧 并将多索引转换为具有“正常”索引和独立的 每个类别的列:

df2 = df.Profitability.unstack()

或者,如果数据源是系列(不是数据帧),则运行:

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));

最后一条指令将图例向右“移动”一点(比较 设置为默认位置),否则会模糊某些条形图(尝试绘制 没有此说明)

结果是:

enter image description here

但是请注意,supplelements的条比 其他类别,这是非常低的

这就是为什么我提出了第二个解决方案,基于逻辑算法尺度 在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行的图形(用于比较)

结果是:

enter image description here

现在比较容易比较条的高度,y勾号是粗略选择的 在勾选(n-1)*3的基础上

编辑

如果希望图例具有标题,请添加title='Category'ax.legend(...)指令的参数,以上面的任一项为准 您选择的解决方案

相关问题 更多 >

    热门问题