gpt4 book ai didi

python - 如何用matplotlib绘制经典的股票图表?

转载 作者:太空狗 更新时间:2023-10-29 22:28:57 25 4
gpt4 key购买 nike

经典的股票价格图表由一条连接每个时间段的最高价和最低价的垂直线组成,左边的标记表示开盘(第一个)价格,右边的标记表示收盘(最后一个)价格。

classic stock price chart

Matplotlib 可以绘制日文版,称为烛台,但我一直无法找到西文版的解决方案,简称为“条形图”。 Matplotlib 能画出这样的图表吗?

最佳答案

从 matplotlib 财务包(documentationcode)中调整烛台函数:

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, open, high, low, close, ...) vs
(time, open, close, high, low, ...)
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, open, close, high, low = q[:5]
else:
t, open, high, low, 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, t), ydata=(open,open),
color=color, linewidth=linewidth, antialiased=True)
openlines.append(openline)

closeline = Line2D(xdata=(t , t+OFFSET), ydata=(close,close),
color=color, linewidth=linewidth, antialiased=True)
closelines.append(closeline)

ax.add_line(vline)
ax.add_line(openline)
ax.add_line(closeline)

ax.autoscale_view()

return lines, openlines, closelines

称它为例如像这样:

westerncandlestick(ax, quotes, width=0.6, linewidth=1.44, ochl=False)

enter image description here

当然,您可以使用 colorupcolordown 参数调整颜色。

重现上述情节的完整代码:

import matplotlib.pyplot as plt

from matplotlib.finance import quotes_historical_yahoo_ohlc
from matplotlib.lines import Line2D


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, open, high, low, close, ...) vs
(time, open, close, high, low, ...)
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, open, close, high, low = q[:5]
else:
t, open, high, low, 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, t), ydata=(open,open),
color=color, linewidth=linewidth, antialiased=True)
openlines.append(openline)

closeline = Line2D(xdata=(t , t+OFFSET), ydata=(close,close),
color=color, linewidth=linewidth, antialiased=True)
closelines.append(closeline)

ax.add_line(vline)
ax.add_line(openline)
ax.add_line(closeline)

ax.autoscale_view()

return lines, openlines, 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, quotes, width=0.6, linewidth=1.44, ochl=False)


ax.xaxis_date()
ax.autoscale_view()
plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')

plt.show()

关于python - 如何用matplotlib绘制经典的股票图表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44810875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com