在一个条形图中绘制字典词典

时间:2017-11-05 13:15:03

标签: python dictionary matplotlib plot bar-chart

我有一本看起来像这样的字典

d = {
    'a' : {'L1':2, 'L2':5, 'L3':8},
    'b' : {'L1':4, 'L2':7, 'L3':10},
    'c' : {'L1':19, 'L2':0, 'L3':1},
}

我想有一个图表,其中x轴包含我的键,每个键有3个条形图,对应L1,L2和L3的值。
总而言之,我的情节将包含按键分组的9个条形图(因此3组3个条形图)。

到目前为止,我能做的是将我的字典转换为数据帧,然后对每个键使用seaborn的条形图,但这会留下3个不同的图。

是否可以有一个包含所有信息的图?

非常感谢。

2 个答案:

答案 0 :(得分:6)

你可以使用熊猫,即:

import matplotlib.pyplot as plt
import pandas as pd

d = {
    'a': {'L1':2, 'L2':5, 'L3':8},
    'b': {'L1':4, 'L2':7, 'L3':10},
    'c': {'L1':19, 'L2':0, 'L3':1},
}
pd.DataFrame(d).plot(kind='bar')
plt.show()

输出:

output

在您的情况下,您需要在x轴上使用dict键,以便使用

pd.DataFrame(d).T.plot(kind='bar')

答案 1 :(得分:0)

对于那些寻找没有 Pandas 的解决方案的人,seaborn 还可以绘制字典。您只需要重新排列字典:

import seaborn as sb

d = {
    'x':    ['L1', 'L1',  'L1', 'L2', 'L2', 'L2', 'L3', 'L3', 'L3'],
    'y':    [   2,    4,   19,     5,    7,    0,    8,    10,   1],
    'group':[  'a',  'b', 'c',   'a',  'b',  'c',   'a',  'b',  'c']
}

sb.barplot(x='x', y='y', hue="group", data=d)

enter image description here

请注意,barplot 会自动将 xgroup 字段分组。例如,将 L3 替换为 L2

d = {
    'x':    ['L1', 'L1',  'L1', 'L2', 'L2', 'L2', 'L2', 'L2', 'L2'],
    'y':    [   2,    4,   19,     5,    7,    0,    8,    10,   1],
    'group':[  'a',  'b', 'c',   'a',  'b',  'c',   'a',  'b',  'c']
}

我们得到:

enter image description here