首页 > 解决方案 > matplotlib bar() 和 pandas bar() 函数有什么区别?

问题描述

考虑以下数据框:

    index   count   sum
0   4       3372    230
1   4       68855   343
2   2       17948   232
3   5       708     788
4   5       9117    558

我想通过首先按“索引”列分组并为每个“索引”绘制“计数”的平均值来绘制条形图。我可以通过两种方式做到这一点:
方法1:

groups = df.groupby('index')

for name,group in groups:
  print(name)
  print(group)
  plt.bar(name, group['count'].median(), label=name, align='center')

plt.legend()
plt.show()

上面的代码导致:

在此处输入图像描述

方法二:

df.groupby('index')['count'].median().plot.bar()
plt.xlabel('index')
plt.ylabel('count')
plt.title('index')
plt.show()

结果是:

在此处输入图像描述

1. 使用第二种方法时,如何获得每个条的唯一颜色?
2. 使用第一种方法时如何获得连续图(第一种和第二种之间有差距)?

标签: pythondatabasepandasdataframematplotlib

解决方案


当 x 值为数字时,标准 matplotlib 条形图将 x 轴视为数字。如果您希望它们是分类的,只需将它们更改为字符串:

groups = df.groupby('index')
for name, group in groups:
    plt.bar(str(name), group['count'].median(), label=name, align='center')
plt.legend()

matplotlib 中的分类条形图

熊猫条将有一个分类 x 轴,当值是数字时也是如此。要给条着色,color=可以使用参数(默认颜色的名称为“C0”、“C1”等):

df.groupby('index')['count'].median().plot.bar(color=['C0', 'C1', 'C2'])

带有颜色的熊猫条形图


推荐阅读