2016-04-25 7 views
3

私はREST API呼び出しのために取得しているデータでMatplotlibを使用して燭台の図をプロットしようとしています。しかし、呼び出しがユニークなアクセストークンを使用しているので、サンプルデータをダウンロードし、この質問の目的のためにCSVにロードしました。 Here is a pastebin linkをサンプルデータのように表示します。 Python内でデータを処理するために、私はPandasを使ってデータフレームを作成しています。Matplotlibの燭台(日中)グラフは1つの大きな塊です

import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib.ticker as mticker 
import matplotlib.dates as mdates 
from matplotlib.finance import candlestick_ohlc 
from datetime import date 

""" Pandas """ 
historic_df = pd.read_csv("sample_data.csv") 

dates = pd.to_datetime(historic_df['time'], format="%Y-%m-%dT%H:%M:%S.%fZ") 
openp = historic_df['openAsk'] 
highp = historic_df['highAsk'] 
lowp = historic_df['lowAsk'] 
closep = historic_df['closeAsk'] 

""" Matplotlib """ 
ax1 = plt.subplot2grid((1,1), (0,0)) 
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S')) 

x = 0 
ohlc = [] 

while x < len(dates): 
    d = mdates.date2num(dates[x]) 
    append_me = d, openp.values[x], highp.values[x], lowp.values[x], closep.values[x] 
    ohlc.append(append_me) 
    x += 1 

candlestick_ohlc(ax1, ohlc, width=0.4, colorup='#77d879', colordown='#db3f3f') 
plt.show() 

そして、ここに私の出力は次のようになります。:

enter image description here

あなたは一種の燭台のための縦のラインを作ることができ、しかしバーはそうここに私のコードは次のようになります本当に広い。どのように私はこれを解決することができるかに関する任意のアイデア?ありがとう。

+0

作品罰金(毎日のデータを使用して)、自分の実際のデータを投稿してください。私がしたのは、この行をここで変更しただけです: 'dates = pd.to_datetime(historical_df ['time'])'それは良いようです。何らかの理由で、1時間ごとに複数の日をプロットして1つのチャートにプロットして、重なりを説明するように見えるようです... – Matt

+0

私は[pastebin](http:// pastebin .com/3Z26y9dA)を使用して、私がスクリーンショットしたグラフをプロットするのに使用されたデータと比較します。私のデータは日中に違いがあるのか​​どうかはわからないので、それぞれのエントリーは別の日ではなく、5〜10秒ほど離れているようです。 – ng150716

答えて

4

ただ、チャート上の幅を変更すると、それは罰金になります:

candlestick_ohlc(ax1, ohlc, width=0.001, colorup='#77d879', colordown='#db3f3f')

は、あなたのデータを用いて試験し、それがよさそうです。

+0

これでやったのですが、とにかく私は幅を自動的に調整することができますか? – ng150716

+0

mplへのprは、おそらく受け入れられるデフォルトの幅をよりインテリジェントにします。 – tacaswell

+0

申し訳ありませんが、少し遅れて返信しますが、あなたはPRの意味を詳しく説明できますか? – ng150716

1

candlestick_ohlcには、文書化されていないwidth引数が鍵です。それぞれのデータポイント間に1日の割合で掛けます。データは分単位で表示されるため、これは次のようになります。

candlestick_ohlc(ax, tuples, width=.6/(24*60), colorup='g', alpha =.4); 

自動化するには、連続するデータポイントの日付の差を使用します。例:

width=0.6/(mdates.date2num(dates[1])-mdates.date2num(dates[0])) 

これはリンクが明白ではないが、これはFAQであることに注意してください。参照:いくつかのヤフーデータの

関連する問題