我有一个仓库的起始和结束数量的嵌套字典。我想用matplotlib将这些数据绘制成一个堆栈图。我需要转换数据,以便x值是一个列表,y值是列表的列表。我想将图限制为键,其中键小于或等于截止日期,' cutoff'。我编写了所有代码来编写绘图,但是无法将字典中的数据转换为x和y值。在我的示例中,我在下面手动输入值。在真实的脚本中,我有一个更大的数据集,需要一种方法来实际编码转换。
from datetime import datetime
import matplotlib
import matplotlib.pyplot as plt
d = {
datetime(2015, 1, 19) : {'start qty': 13 , 'end qty': 12},
datetime(2015, 1, 20) : {'start qty': 10 , 'end qty': 34},
datetime(2015, 1, 21) : {'start qty': 30 , 'end qty': 35},
datetime(2015, 1, 22) : {'start qty': 20 , 'end qty': 40},
}
cutoff = datetime(2015, 1, 21)
y = [[13,10,30],[12,34,35]]
x = [datetime(2015, 1, 19), datetime(2015, 1, 20), datetime(2015, 1, 21)]
plt.stackplot(x,y)
plt.show()
答案 0 :(得分:1)
要根据您的截止日期检查日期:
x = [x for x in d if x <= cutoff]
对于y,请使用键:
y = [[d[k]['start qty'],d[k]['end qty']] for k in x]
如果您要创建字典并订购数据,请使用orderedDict或sort
x
。
为了您的编辑:
x = [dte for dte in d if dte <= cutoff]
y = [[],[]]
for k in x:
y[0].append(d[k]["start qty"])
y[1].append(d[k]["end qty"])