首页 > 解决方案 > 如何让 matplotlib 在图形上显示来自两个字典的数据?

问题描述

使用以下代码时,所有数据值都正确显示:

在此处输入图像描述

import numpy as np
import matplotlib.pyplot as plt

ME_Requests = {'John Doe': 47, 'Amanda Doe': 27, 'Maria Doe': 26,}
non_ME_Requests = {'John Doe': 105, 'Amanda Doe': 64, 'Maria Doe': 48, 'Dimitrii Doe': 44}
month="Apr-2020"
X = np.arange(len(ME_Requests))
X_non_ME = np.arange(len(non_ME_Requests))
ax = plt.subplot(111)
ax.bar(X, ME_Requests.values(), width=0.2, align='center')
ax.bar(X_non_ME-0.2, non_ME_Requests.values(), width=0.2, align='center')
ax.legend(('ME_Requests','non_ME_Requests'))

# plt.xticks(X, ME_Requests.keys())
plt.xticks(X_non_ME, non_ME_Requests.keys(), rotation=90)
plt.tight_layout()
plt.subplots_adjust(top=0.85)
plt.title("Email Requests Closed Per Team Member In {}".format(month), fontsize=17)
plt.show()

但是,当我使用下面的代码时,它并没有真正起作用(不包括 Dimitrii Doe):

import numpy as np
import matplotlib.pyplot as plt

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,}
month="Apr-2020"
X = np.arange(len(ME_Requests))
X_non_ME = np.arange(len(non_ME_Requests))
ax = plt.subplot(111)
ax.bar(X, ME_Requests.values(), width=0.2, align='center')
ax.bar(X_non_ME-0.2, non_ME_Requests.values(), width=0.2, align='center')
ax.legend(('ME_Requests','non_ME_Requests'))

# plt.xticks(X, ME_Requests.keys())
plt.xticks(X_non_ME, non_ME_Requests.keys(), rotation=90)
plt.tight_layout()
plt.subplots_adjust(top=0.85)
plt.title("Email Requests Closed Per Team Member In {}".format(month), fontsize=17)
plt.show()

在此处输入图像描述

考虑到我无法提前预测哪个字典(ME_Requests 或 non_ME_Requests)将具有更多值,如何正确显示数据?

标签: pythonmatplotlib

解决方案


你会考虑另一个包,比如 Pandas,它也使用 matplotlib 后端:

import pandas as pd

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

df.plot.bar()

输出:

在此处输入图像描述


推荐阅读