リストにローソク足データが保存されています(日時、始値、終値、高値、安値)。matplotlibを使用してこのデータをプロットするための最良の方法は何でしょうか?自動的にnumpyを通過する必要がありますか?その場合、どうすればリストをnumpyが理解できるものに変換できますか?
前もって感謝します 。
リストにローソク足データが保存されています(日時、始値、終値、高値、安値)。matplotlibを使用してこのデータをプロットするための最良の方法は何でしょうか?自動的にnumpyを通過する必要がありますか?その場合、どうすればリストをnumpyが理解できるものに変換できますか?
前もって感謝します 。
実際、あなたがすでに持っていること以外に何かをする理由はありません。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ファイナンスの例をいくつか見てください。これは良いスタートです。
PythonリストをNumpyリストに簡単に変換できます
import numpy as np
l1 = [1, 2, 3, 4]
a = np.array(l1)
matplotlibはPythonリストも受け入れますが(内部的にはnumpy配列に変換すると思います)
使用できます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')
複数のプロットがある場合(日時データに対して高、低、高と低の差などをプロットする場合)、@ Spotが示唆しているように、それをnumpy配列に変換する方がよい場合があります。
おそらくそれを行う最良の方法は、このすべてのデータを1つのグラフにプロットして、相対的な関係を確認できるようにすることです。この方法で、グラフに複数の線をプロットできます。
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()