首页 > 解决方案 > 如何用一张图上显示的两个字典的值来注释熊猫条形图?

问题描述

我的代码:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

ME_Requests = {'John Doe': 105, 'Amanda Doe': 64, 'Maria Doe': 48, 'Dimitrii Doe': 44}
non_ME_Requests = {'John Doe': 47, 'Amanda Doe': 27, 'Maria Doe': 26,}

df = pd.DataFrame({'ME_Request':ME_Requests,
          'non_ME_request':non_ME_Requests})
          

axes = df.plot.bar( title='My Barplots',subplots = True, sharex=True, sharey=True)
for ax in axes:
    for p in ax.patches:
        ax.annotate(str(round(p.get_height(),2)), (p.get_x(), p.get_height()))

plt.gcf().autofmt_xdate()
plt.show()

它返回两个带有注释的单独条形图(蓝色和橙色)。但是,我的目标是在同一张图表上同时显示(蓝色和橙色)。另外,不知道为什么橙色图表的数字以不同的格式显示:0.0 而不是 0。

在此处输入图像描述

有人可以帮我解决这个问题吗?先感谢您!

标签: pythonpandasmatplotlib

解决方案


您正在传递subplots=True给绘图函数,这就是它创建两个子图而不是将两组条形图放在同一轴上的原因。

如果使用subplots=False,则该函数仅返回一个轴而不是数组,因此您需要删除 for 循环

ax = df.plot.bar( title='My Barplots',subplots = False, sharex=True, sharey=True)
for p in ax.patches:
    ax.annotate('{:.0f}'.format(p.get_height()), (p.get_x(), p.get_height()))

推荐阅读