【问题标题】:Plot Bar graph with multiple series绘制具有多个系列的条形图
【发布时间】:2020-08-06 05:36:12
【问题描述】:

我目前拥有三个具有相同键但具有不同值的字典,因为它们是针对三个不同年份的。我试图在年份之间进行比较。我想知道如何在同一轴上绘制所有三个图表。我有以下代码

import pandas as pd
dt = {'2018':nnum.values, '2019':nnum2.values, '2020':nnum3.values,}
df1=pd.DataFrame(dt,index=nnum.keys())
df1.plot.bar()

我正在尝试沿着这条线做一些事情,因为每个字典都包含相同的键,但我不断收到错误消息。无论如何都可以将索引设置为字典的键而不必手动输入

【问题讨论】:

  • 这里有什么错误?
  • 错误提示“无法将输入数组从形状 (49) 广播到形状 (55)”我想知道是否有办法将缺失的键包含在形状为 49 的字典中
  • 请给我一些时间。
  • 没问题感谢您的帮助

标签: python-3.x pandas matplotlib


【解决方案1】:

为值添加(),为列表字典转换为字典dt中的列表:

nnum = {1:4,5:3,7:3}
nnum2 = {7:8,9:1,1:0}
nnum3 = {0:7,4:3,8:5}

dt = {'2018': list(nnum.values()), '2019':list(nnum2.values()), '2020':list(nnum3.values())}
df1=pd.DataFrame(dt,index=nnum.keys())

print(df1)
   2018  2019  2020
1     4     8     7
5     3     1     3
7     3     0     5

df1.plot.bar()

编辑:如果字典的长度不同并且需要0 填充的新值,可以使用:

nnum = {1:4,5:3,7:3}
nnum2 = {7:8,9:1,1:0}
nnum3 = {0:7,4:3}

from  itertools import zip_longest

L = [list(nnum.values()), list(nnum2.values()), list(nnum3.values())]
L = list(zip_longest(*L, fillvalue=0))
df1 = pd.DataFrame(L,index=nnum.keys(), columns=['2018','2019','2020'])

print(df1)
   2018  2019  2020
1     4     8     7
5     3     1     3
7     3     0     0

【讨论】:

  • 非常感谢!我注意到其中一个字典有一些缺失的键,所以一个比另一个多,有没有将 0 分配给缺失的键?
猜你喜欢
  • 2022-07-07
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 2021-11-03
  • 1970-01-01
相关资源
最近更新 更多