如何使用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()

猜你在找的Python相关文章