列表中的烛台数据到matplotlib

时间:2012-04-24 05:01:04

标签: python numpy matplotlib

我有一些烛台数据存储在列表中(datetime,open,close,high,low)。 使用matplotlib绘制这些数据的最佳方法是什么?我是否自动不得不经历numpy?在这种情况下,我如何将列表转换为numpy理解的内容?

提前致谢。

4 个答案:

答案 0 :(得分:5)

实际上,除了你已经拥有的东西之外,没有理由做任何其他事情。 Matplotlib将为您处理转换事宜。

听起来你有一系列时间序列,开放,接近,高低?

类似的东西:

from datetime import datetime
#            date                 open   close    high    low
quotes = [(datetime(2012, 2, 1), 103.62, 102.01, 103.62, 101.90),
          (datetime(2012, 2, 2), 102.24, 102.90, 103.16, 102.09),
          ...
          (datetime(2012, 4, 12), 100.89, 102.59, 102.86, 100.51)]

这实际上是matplotlib的烛台功能所期望的确切数据结构。

您只需将日期时间转换为matplotlib的内部日期格式即可。使用matplotlib.dates.date2num

E.g。

from matplotlib.dates import date2num

# I'm assuming you have tuples, so we can't modify them in-place...
quotes = [(date2num(item[0]),) + item[1:] for item in quotes]

除此之外,请看一些matplotlib财务示例。 This one is a good start.

答案 1 :(得分:0)

您可以轻松地将python列表转换为numpy列表

import numpy as np
l1 = [1, 2, 3, 4]
a = np.array(l1)

虽然matplotlib也接受python列表(我认为它在内部将其转换为numpy数组)

答案 2 :(得分:0)

您可以使用itemgetter

from operator import itemgetter
data = [(1,2,3), (2,3,4), (3,4,5)]

import pylab as plt
plt.plot(map(itemgetter(0), data),map(itemgetter(1),data),'o')

如果你有多个图(你可以根据日期时间数据绘制高,低,高差和低差等),最好将它转换为numpy数组,如@Spot所建议的那样。

答案 3 :(得分:0)

可能最好的方法是将所有这些数据绘制在一个图表中,这样您就可以看到相对关系。您可以这样在图表中绘制多条线:

import pylab

data = [(5,2,3), (2,8,4), (3,5,9)]
t_data = zip(*data) #transform the data

crd = range(len(t_data[0])) #coordinates

pylab.plot(crd, t_data[0], crd, t_data[1], crd, t_data[2])

pylab.show()

但是如果你想在不同的图表中打印每个类别,你可以这样做:

fig = pylab.figure()

sub_fig_1 = fig.add_subplot(3,1,1)
sub_fig_1.plot(t_data[0])

sub_fig_2 = fig.add_subplot(3,1,2)
sub_fig_2.plot(t_data[1])

sub_fig_3 = fig.add_subplot(3,1,3)
sub_fig_3.plot(t_data[2])

pylab.show()