Matplotlib 烛台图看起来很奇怪
Matplotlib Candlestick graph looks weird
我试图使用从 quandl 中提取的股票数据绘制烛台图。然而,该图看起来很怪异,只显示了几个条形图。我不知道发生了什么。非常感谢任何帮助。
代码如下:
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()
这是图表:
这里有两个主要问题。
日期应该是与相关日期相对应的数值。
date_val=matplotlib.dates.date2num(df.index.to_pydatetime())
candlestick_ohlc
的第二个参数需要是一系列序列,即每个数据都需要单独包含在其中,如 (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()
或者,更简洁:
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()
我试图使用从 quandl 中提取的股票数据绘制烛台图。然而,该图看起来很怪异,只显示了几个条形图。我不知道发生了什么。非常感谢任何帮助。
代码如下:
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()
这是图表:
这里有两个主要问题。
日期应该是与相关日期相对应的数值。
date_val=matplotlib.dates.date2num(df.index.to_pydatetime())
candlestick_ohlc
的第二个参数需要是一系列序列,即每个数据都需要单独包含在其中,如(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()
或者,更简洁:
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()