【问题标题】:Candlestick data in list to matplotlib列表中的烛台数据到 matplotlib
【发布时间】:2012-04-24 05:01:04
【问题描述】:

我有一些烛台数据存储在列表中(日期时间、开盘价、收盘价、高点、低点)。 使用 matplotlib 绘制这些数据的最佳方法是什么?我是否必须自动通过 numpy ?在这种情况下,我如何将列表转换为 numpy 可以理解的内容?

提前致谢。

【问题讨论】:

  • 您是否尝试过将您的列表输入到绘图程序中?如果以某种方式失败,您会发布失败的代码吗?

标签: python numpy matplotlib


【解决方案1】:

实际上,除了你已经拥有的东西之外,没有理由做任何事情。 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

例如

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.

【讨论】:

  • 哇!我没有意识到 matplotlib 可以绘制烛台数据。谢谢你。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    您可以使用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 所建议的那样。

    【讨论】:

      【解决方案4】:

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

      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()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多