Python:从嵌套的dict中获取数据以绘制条形图

时间:2017-09-30 17:32:53

标签: python pandas dictionary matplotlib

我正试图从这样的字典中获取数据:

d= { 
'1992': 
{ 'j': 2048, 'f': 1290, 'm': 3221, 'a': 6994, 'ma': 2091, 'ju': 688, 'jl': 981, 'ag': 2389, 's': 3010, 'o': 13006, 'n': 10477, 'd': 6022 },
'1998': 
{ 'j': 1751, 'f': 1056, 'm': 2664, 'a': 3091, 'ma': 1088, 'ju': 1215, 'jl': 699, 'ag': 2108, 's': 1799, 'o': 4522, 'n': 7200, 'd': 5614 }}

并继续使用此模式:  ( '年(X)':{ 'MONTH1':值(1),...月(N):(n)值)}

并在一个条形图中显示它们,该条形图在x轴上具有月份列表,在y轴上具有年份。我尝试使用Python dict to DataFrame Pandas中的Dataframe解决方案,但我无法应用于图表。 Matplotlib允许我只插入一个'年':

plt.bar(range(len(d)), d.values(), fill=False)

所以我猜Pandas'Dataframe'更好。有没有办法在同一个栏中获取这些数据?

1 个答案:

答案 0 :(得分:1)

您似乎需要DataFrame.plot.bar

df = pd.DataFrame(d)
df.plot.bar()

如果还要设置months的顺序:

names = ['j', 'f', 'm', 'a', 'ma','ju', 'jl', 'ag', 's',  'o', 'n', 'd']
df = pd.DataFrame(d).reindex(names)
print (df)
     1992  1998
j    2048  1751
f    1290  1056
m    3221  2664
a    6994  3091
ma   2091  1088
ju    688  1215
jl    981   699
ag   2389  2108
s    3010  1799
o   13006  4522
n   10477  7200
d    6022  5614

graph