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)
就像下图一样
使用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)
Run Code Online (Sandbox Code Playgroud)combined_df
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)
Run Code Online (Sandbox Code Playgroud)combined_df
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)
Run Code Online (Sandbox Code Playgroud)combined_df.plot.bar()
| 归档时间: |
|
| 查看次数: |
5895 次 |
| 最近记录: |