在 matplotlib 中的嵌套字典的数据上创建图表(图)

Yar*_*lav 3 python dictionary matplotlib

我可以根据“简单”字典在 matplotlib 中构建一个简单的绘图:

import matplotlib.pyplot as plt
D = {u'Label1':26, u'Label2': 17, u'Label3':30}
plt.bar(range(len(D)), D.values(), align='center')
plt.xticks(range(len(D)), D.keys())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,如何在我不知道的一个图上根据这些字典的数据创建两个图形?

NG1={'need1': [{'good1': 3, 'good2': 4}], 'need2': [{'good2': 2, 'good3': 2}]}
NG2={'need1': [{'good1': 13, 'good2': 23}], 'need2': [{'good2': 8, 'good3': 14}]}
Run Code Online (Sandbox Code Playgroud)

就像下图一样

在此输入图像描述

Maa*_*bré 5

使用pandas你可以做我认为你想做的事情

NG1={'need1': {'good1': 3, 'good2': 4}, 'need2': {'good2': 2, 'good3': 2}}
NG2={'need1': {'good1': 13, 'good2': 23}, 'need2': {'good2': 8, 'good3': 14}}
Run Code Online (Sandbox Code Playgroud)

(注意缺少[]

combined_df = pd.concat({'ng1': pd.DataFrame(NG1), 'ng2': pd.DataFrame(NG2)}).unstack(0)
Run Code Online (Sandbox Code Playgroud)
combined_df
Run Code Online (Sandbox Code Playgroud)
   need1            need2
    ng1     ng2     ng1     ng2
good1   3.0     13.0    NaN     NaN
good2   4.0     23.0    2.0     8.0
good3   NaN     NaN     2.0     14.0
Run Code Online (Sandbox Code Playgroud)

根据您想要的具体内容,您可以省略unstack

combined_df.plot.bar()
Run Code Online (Sandbox Code Playgroud)

交付

条形图

编辑更新

我无法以这种方式准确创建您需要的内容,您需要使用不同的字形和图形,我没有技能或时间来执行此操作,但我可以以正确的方式提供数据

combined_df = pd.concat({'ng1': pd.DataFrame(NG1), 'ng2': pd.DataFrame(NG2)}).stack()
combined_df.index.names = ['ng', 'good', 'need']
combined_df = combined_df.unstack(['good'])
combined_df['sum'] = combined_df.sum(axis=1)
Run Code Online (Sandbox Code Playgroud)
combined_df
Run Code Online (Sandbox Code Playgroud)
    good    good1   good2   good3   sum
ng  need                
ng1     need1   3.0     4.0     NaN     7.0
need2   NaN     2.0     2.0     4.0
ng2     need1   13.0    23.0    NaN     36.0
need2   NaN     8.0     14.0    22.0
Run Code Online (Sandbox Code Playgroud)
combined_df.plot.bar()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述