6

日付と時刻であるインデックスを x 軸として使用し、データフレーム内の残りのデータを実際のデータとして使用して、pandas データフレームにデータをプロットしようとしています。これが私が今試していることです:

from matplotlib.finance import candlestick2

bars[['open','high','low','close']].head()


tickdatetime         open        high        low         close          

2012-09-20 09:00:00  1447.50     1447.50     1447.00     1447.00

2012-09-20 09:01:00  1447.00     1447.25     1447.00     1447.25

2012-09-20 09:02:00  1447.25     1447.75     1447.25     1447.50

2012-09-20 09:03:00  1447.75     1447.75     1447.25     1447.50

2012-09-20 09:04:00  1447.25     1447.50     1447.25     1447.50

fig,ax = plt.subplots()
ax.plot_date(bars.ix.to_pydatetime(), s, 'v-')
fig,ax = plt.subplots()
ax.plot_date(bars.ix.to_pydatetime(), s, 'v-')
ax = fig.add_axes([0.1, 0.2, 0.85, 0.7])
ax.autoscale_view()
linecol, rectcol =  candlestick2(ax,bars['open'],bars['close'],bars['high'],bars['low'],width=.5,colorup='g',colordown''r',alpha=1) 
z  = rectcol.get_zorder()
linecol.set_zorder(0.9*z)

しかし、私はこのエラーが発生します:

AttributeError                            Traceback (most recent call last)
<ipython-input-57-d62385067ceb> in <module>()
1 fig,ax = plt.subplots()
----> 2 ax.plot_date(bars.ix.to_pydatetime(), s, 'v-')
3 
4 #ax = fig.add_axes([0.1, 0.2, 0.85, 0.7])
5 ax.autoscale_view()

AttributeError: '_NDFrameIndexer' object has no attribute 'to_pydatetime'

私は、bars.plot() がこれを自動的に処理するための優れたインターフェイスであることを理解していますが、candlestick2 の使用、より多くのサブプロットなどを実行できるようにしたいと考えています。

私の問題の根本は、データフレームからインデックス値を取得し、インデックス値を日時に変換しようとしているだけだと思いますが、まだできていません。

どんなアイデアでも大歓迎です!

4

1 に答える 1

5

Chang Sheが指摘したように、bars.indexあなたが望むものではなくbars.ix. bars.index基本的にインデックスを持つ Series である Index オブジェクトを返します。これはあなたが望むものです。bar.ix は _NDFrameIndexer を返します。これは、文書化されていないように見えますが、DataFrame 全体のある種のビュー (たとえば、 try bars.ix[2]) です。

コード内で bars.ix を bars.index に置き換えると、エラーが削除され (一致しない ' を作成するタイプミスも削除された場合)、最初の 2 つのサブプロットで日付の目盛りが作成されます。ただし、ろうそく足プロットで日付ティックを作成しないことに注意してください。コードはそれを行いませんが、bars.index を使用すると、それほど困難なく行うことができます。

ただし、candlestick2 プロットに日付の目盛りを付けたい場合は、少し難しくなります。ここでの問題は、入力内容からわかるように、candlestick2 が x 軸の値をまったく使用しないことです。ローソク足を 0、1、2... などにプロットします。x軸を日付で設定しようとすると、ティックまたは制限として、プロットがx軸上で完全に異なる場所になるため、すべてが台無しになります。

これを解決する簡単な方法の 1 つは、ローソク足 2 の代わりにローソク足を使用することではなく、x 軸をデータの単なる整数インデックスのままにし、代わりに日付に基づいて目盛りラベルを設定することです。たとえば、次のようになります。

fig = figure() 
ax = fig.add_subplot(111) 
candlestick2(ax,bars['open'],bars['close'],bars['high'],bars['low'],width=.5,colorup='g',colordown='r',alpha=1)
ax.set_xticks(arange(0,len(bars))) 
ax.set_xticklabels(bars.index,rotation=70)

これは日付をプロットし、(a) ティックが整数の位置にあることを確認し、日付に基づいてそれらのティックのラベルを設定します。また、実際に見えるように回転させました。ax.set_xticklabels は文字列を受け取るので、日付の書式を好きなように変更できます。

于 2013-03-07T22:09:38.523 に答える