如何使用matplotlib绘制经典股票图表?
发布时间:2020-05-23 11:19:52 所属栏目:Python 来源:互联网
导读:经典股票价格图表包含一条垂直线,连接每个时间段的最高价和最低价,左侧为开盘价(第一个),右侧为收盘价(最后一个价). Matplotlib可以绘制日文版,称为烛台,但我无法找到西方版本的解决方案,简称为“条形图”. Matplotlib可以绘制这样的图表吗? 调整matplotlib
|
经典股票价格图表包含一条垂直线,连接每个时间段的最高价和最低价,左侧为开盘价(第一个),右侧为收盘价(最后一个价). Matplotlib可以绘制日文版,称为烛台,但我无法找到西方版本的解决方案,简称为“条形图”. Matplotlib可以绘制这样的图表吗? 解决方法调整matplotlib财务包( documentation,code)中的烛台功能:def westerncandlestick(ax,quotes,width=0.2,colorup='k',colordown='r',ochl=True,linewidth=0.5):
"""
Plot the time,open,high,low,close as a vertical line ranging
from low to high. Use a rectangular bar to represent the
open-close span. If close >= open,use colorup to color the bar,otherwise use colordown
Parameters
----------
ax : `Axes`
an Axes instance to plot to
quotes : sequence of quote sequences
data to plot. time must be in float date format - see date2num
(time,close,...) vs
(time,...)
set by `ochl`
width : float
fraction of a day for the open and close lines
colorup : color
the color of the lines close >= open
colordown : color
the color of the lines where close < open
ochl: bool
argument to select between ochl and ohlc ordering of quotes
linewidth: float
linewidth of lines
Returns
-------
ret : tuple
returns (lines,openlines,closelines) where lines is a list of lines
added
"""
OFFSET = width / 2.0
lines = []
openlines = []
closelines = []
for q in quotes:
if ochl:
t,low = q[:5]
else:
t,close = q[:5]
if close >= open:
color = colorup
else:
color = colordown
vline = Line2D( xdata=(t,t),ydata=(low,high),color=color,linewidth=linewidth,antialiased=True)
lines.append(vline)
openline = Line2D(xdata=(t - OFFSET,ydata=(open,open),antialiased=True)
openlines.append(openline)
closeline = Line2D(xdata=(t,t+OFFSET),ydata=(close,close),antialiased=True)
closelines.append(closeline)
ax.add_line(vline)
ax.add_line(openline)
ax.add_line(closeline)
ax.autoscale_view()
return lines,closelines
叫它,例如像这样: westerncandlestick(ax,width=0.6,linewidth=1.44,ochl=False) 当然,您可以使用colorup和colordown参数调整颜色. 完成上述情节的完整代码: import matplotlib.pyplot as plt
from matplotlib.finance import quotes_historical_yahoo_ohlc
from matplotlib.lines import Line2D
def westerncandlestick(ax,linewidth=0.5):
"""
Plot the time,close as a vertical line ranging
from low to high. Use a rectangular bar to represent the
open-close span. If close >= open,otherwise use colordown
Parameters
----------
ax : `Axes`
an Axes instance to plot to
quotes : sequence of quote sequences
data to plot. time must be in float date format - see date2num
(time,...) vs
(time,...)
set by `ochl`
width : float
fraction of a day for the open and close lines
colorup : color
the color of the lines close >= open
colordown : color
the color of the lines where close < open
ochl: bool
argument to select between ochl and ohlc ordering of quotes
linewidth: float
linewidth of lines
Returns
-------
ret : tuple
returns (lines,closelines) where lines is a list of lines
added
"""
OFFSET = width / 2.0
lines = []
openlines = []
closelines = []
for q in quotes:
if ochl:
t,low = q[:5]
else:
t,close = q[:5]
if close >= open:
color = colorup
else:
color = colordown
vline = Line2D( xdata=(t,antialiased=True)
lines.append(vline)
openline = Line2D(xdata=(t - OFFSET,antialiased=True)
openlines.append(openline)
closeline = Line2D(xdata=(t,antialiased=True)
closelines.append(closeline)
ax.add_line(vline)
ax.add_line(openline)
ax.add_line(closeline)
ax.autoscale_view()
return lines,closelines
from matplotlib.dates import DateFormatter,WeekdayLocator,
DayLocator,MONDAY
# (Year,month,day) tuples suffice as args for quotes_historical_yahoo
date1 = (2004,2,1)
date2 = (2004,4,12)
mondays = WeekdayLocator(MONDAY) # major ticks on the mondays
alldays = DayLocator() # minor ticks on the days
weekFormatter = DateFormatter('%b %d') # e.g.,Jan 12
dayFormatter = DateFormatter('%d') # e.g.,12
quotes = quotes_historical_yahoo_ohlc('INTC',date1,date2)
if len(quotes) == 0:
raise SystemExit
fig,ax = plt.subplots()
fig.subplots_adjust(bottom=0.2)
ax.xaxis.set_major_locator(mondays)
ax.xaxis.set_minor_locator(alldays)
ax.xaxis.set_major_formatter(weekFormatter)
westerncandlestick(ax,ochl=False)
ax.xaxis_date()
ax.autoscale_view()
plt.setp(plt.gca().get_xticklabels(),rotation=45,horizontalalignment='right')
plt.show() (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
