烛台图表上的未来注释

时间:2013-11-29 15:22:43

标签: python matplotlib financial

我有绘制烛台图表的脚本。我在这个脚本中添加了两个注释。一个是“最后数据”,显示最后一个蜡烛,第二个注释应显示未来点。但出于某种原因,它在图片上看不到。我怎样才能看到它?我试图更改图表宽度和plt.axis值,但没有找到解决方案。

#!/usr/bin/env python
import matplotlib.pyplot as plt
from matplotlib.dates import  DateFormatter, WeekdayLocator, HourLocator, \
     DayLocator, MONDAY
from matplotlib.finance import quotes_historical_yahoo, candlestick,\
     plot_day_summary, candlestick2

from matplotlib.patches import Ellipse, Circle
el = Ellipse((2, -1), 0.5, 0.5)

# (Year, month, day) tuples suffice as args for quotes_historical_yahoo
date1 = ( 2013, 11, 10)
date2 = ( 2013, 12, 29)


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('INTC', date1, date2)

if len(quotes) == 0:
    raise SystemExit

fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2)

candlestick(ax, quotes, width=0.6)

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

dt = quotes[0][0]

ax.annotate(
                'Last data',
                xy=(dt+16, 24),
                xytext=(dt+3, 25),
                arrowprops=dict(arrowstyle='simple', fc="0.6", ec="none", patchB=el, connectionstyle="arc3,rad=0.3", facecolor='black')
        )

ax.annotate(
                'Future',
                xy=(dt+19, 24.5),
                xytext=(dt+2, 23.7),
                arrowprops=dict(arrowstyle='simple', fc="0.6", ec="none", patchB=el, connectionstyle="arc3,rad=0.3", facecolor='black')
        )

plt.savefig('test.png')

annotations

3 个答案:

答案 0 :(得分:1)

您只需要更改图表上的xlimit:

ax = plt.gca()
ax.set_xlim([start_data, end_date])
plt.draw()

答案 1 :(得分:0)

编写的代码(是)在OS X,Python 2.7.5上为我工作。

绘制并标记“未来”和“最后数据”弧。

如果计算烛台,只有13个 - 如果你添加一个打印声明,你也会看到它:

quotes = quotes_historical_yahoo('INTC', date1, date2)
print len(quotes)

正如您的代码所示,11月28日之后的所有内容都是“未来日期”,因此没有相关数据 - 因此来自quotes_historical_yahoo()的回报只有13天的报价(加上周末显然有些差距)

您无法在11月28日之后注释积分,因为它们不在绘图数据中,因此呼叫失败。

答案 2 :(得分:0)

可以添加此代码作为解决方法:

line = Line2D(
        xdata=(dt+19, dt+19),
        ydata=(24.5, 24.5), )

ax.add_line(line) ax.autoscale_view()

现在可以创建注释:

enter image description here