使用matplotlib绘制多个元组列表

时间:2017-08-01 20:28:21

标签: python list matplotlib tuples

我已经格式化了这个例子的数据:

defaultConfig

基本上是元组列表的列表 - ([[(date,value),...],[(date,value),...]]。我想绘制这些数据,使日期符合x-我的条形图上的轴标签和值将是我的酒吧的高度。实现这一目标的最佳或者更少的时间是什么?感谢任何帮助。提前致谢。

1 个答案:

答案 0 :(得分:2)

如果你想要最外面列表的第一个元素的条形图,你应该使用简单的列表推导将你的值输入到列表中,但是要将日期值直接转换为datetime,你可以做类似的事情。如下所示。如果您需要第二个元素的值,只需将datalist[0]更改为datalist[1]

import datetime
x = [datetime.datetime.strptime(tup[0],"%Y-%m-%d") for tup in datalist[0]]
y = [tup[1] for tup in datalist[0]] 

然后只需致电plt.bar()

plt.bar(x,y)
plt.show()

要使用datetime绘制多个条形图,可以执行以下操作:

x1 = [datetime.datetime.strptime(tup[0],"%Y-%m-%d") for tup in datalist[0]]
x2 = [datetime.datetime.strptime(tup[0],"%Y-%m-%d") for tup in datalist[1]]
y1 = [tup[1] for tup in datalist[0]]
y2 = [tup[1] for tup in datalist[1]]

plt.bar(x1,y1,.1,color='blue')
plt.bar([i+datetime.timedelta(.1) for i in x2],y2,.1,color='red')
plt.show()

如果你不知道你需要多少bar,你只需要在for循环中显示最后显示的代码,将数据存储在列表列表中(例如,x4是xarr 3),类似这样:

xarr = [x1,x2]
yarr = [y1,y2]

for i in range(len(datalist)):
    plt.bar([j+datetime.timedelta((i-1)*.1) for j in xarr[i]],yarr[i], width = .1)

plt.show()

enter image description here