2017-09-23 5 views
0

私はquandlから抽出したストックデータを使って燭台のグラフをプロットしようとしていました。しかし、グラフは不気味に見え、少数のバーしか現れませんでした。私は何が起こっているのか分かりません。どんな助けでも大歓迎です。ここでMatplotlib燭台のグラフが奇妙に見える

はコードです:

start=dt.datetime(2000,1,1) 
end=dt.datetime(2017,9,20) 
df=quandl.get('WIKI/TWTR',start_date=start,end_date=end) 
date_val=[x for x in range(len(df.index))] 
open_val=np.array(df['Adj. Open'],dtype=np.float64) 
high_val=np.array(df['Adj. High'],dtype=np.float64) 
low_val=np.array(df['Adj. Low'],dtype=np.float64) 
close_val=np.array(df['Adj. Close'],dtype=np.float64) 
ohlc_data=[date_val,open_val,high_val,low_val,close_val] 
ax1=plt.subplot(111) 
candlestick_ohlc(ax1,ohlc_data,width=0.9,colorup='g',colordown='r',alpha=0.8) 
plt.show() 

これはグラフである:
This is the graph

答えて

1

二つの主要な問題はここにあります。

  • 日付は、問題の日付に対応する数値である必要があります。

    date_val=matplotlib.dates.date2num(df.index.to_pydatetime()) 
    
  • candlestick_ohlcの第2引数は、すなわち各データが(time, open, high, low, close, ...)として個別にそれにする必要がある、配列の配列である必要があります。

可能な解決策:

import matplotlib.pyplot as plt 
import matplotlib.dates 
from matplotlib.finance import candlestick_ohlc 
import datetime as dt 
import quandl 

start=dt.datetime(2000,1,1) 
end=dt.datetime(2017,9,20) 
df=quandl.get('WIKI/TWTR',start_date=start,end_date=end) 

#convert dates to datetime, then to float 
date_val=matplotlib.dates.date2num(df.index.to_pydatetime()) 

open_val=df['Adj. Open'].values 
high_val=df['Adj. High'].values 
low_val=df['Adj. Low'].values 
close_val=df['Adj. Close'].values 
# ohlc_data needs to be a sequence of sequences 
ohlc_data=zip(*[date_val,open_val,high_val,low_val,close_val]) 

ax1=plt.subplot(111) 
candlestick_ohlc(ax1,ohlc_data,colorup='g',colordown='r',alpha=0.8) 

# Format x axis for dates 
ax1.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%Y-%m-%d')) 
ax1.figure.autofmt_xdate() 
plt.show() 

それとも、もっとconsise:

import matplotlib.pyplot as plt 
import matplotlib.dates 
from matplotlib.finance import candlestick_ohlc 
import datetime as dt 
import quandl 

start=dt.datetime(2000,1,1) 
end=dt.datetime(2017,9,20) 
df=quandl.get('WIKI/TWTR',start_date=start,end_date=end) 

#convert dates to datetime, then to float 
df["Date"]=matplotlib.dates.date2num(df.index.to_pydatetime()) 
ohlc_data= df[["Date",'Adj. Open','Adj. High','Adj. Low','Adj. Close']].values 

ax1=plt.subplot(111) 
candlestick_ohlc(ax1,ohlc_data,colorup='g',colordown='r',alpha=0.8) 

# Format x axis for dates 
ax1.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%Y-%m-%d')) 
ax1.figure.autofmt_xdate() 
plt.show() 

enter image description here

+0

これは非常に便利です。どうもありがとうございます! –

関連する問題