Free Trial

Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.


  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • DownloadDownload
  • PrintPrint
Share this Page URL
Help

Chapter 9. Plotting with Matplotlib > Time for action using legend and annotati...

Time for action using legend and annotations

In Chapter 3, Get Into Terms with Commonly Used Functions we learned how to calculate the exponential moving average of stock prices. We will plot the close price of a stock and three of its exponential moving averages. To clarify the plot, we will add a legend. Also, we will indicate crossovers of two of the averages with annotations. Some steps are again omitted to avoid repetition.

  1. Calculate and plot the exponential moving averages: Go back to Chapter 3, Get into Terms with Commonly Used Functions if needed and review the exponential moving average algorithm. Calculate and plot the exponential moving averages of 9, 12 and 15 periods.

    emas = []
    for i in range(9, 18, 3):
    weights = numpy.exp(numpy.linspace(-1., 0., i))
    weights /= weights.sum()
    ema = numpy.convolve(weights, close)[i-1:-i+1]
    idx = (i - 6)/3
    ax.plot(dates[i-1:], ema, lw=idx, label="EMA(%s)" % (i))
    data = numpy.column_stack((dates[i-1:], ema))
    emas.append(numpy.rec.fromrecords(
    data, names=["dates", "ema"]))
    

    Notice that the plot function call needs a label for the legend. We stored the moving averages in record arrays for the next step.

  2. Find the crossover points: Let's find the crossover points of the first two moving averages.

    first = emas[0]["ema"].flatten()
    second = emas[1]["ema"].flatten()
    bools = numpy.abs(first[-len(second):] - second)/second < 0.0001
    xpoints = numpy.compress(bools, emas[1])
    
  3. Annotate the crossover points: Now that we have the crossover points annotate them with arrows. Make sure that the annotation text is slightly away from the crossover points.

    for xpoint in xpoints:
    ax.annotate('x', xy=xpoint, textcoords='offset points',
    xytext=(-50, 30),
    arrowprops=dict(arrowstyle="->"))
    
  4. Add a legend: Add a legend and let Matplotlib decide where to put it.

    leg = ax.legend(loc='best', fancybox=True)
    
    
  5. Make the legend transparent: Make the legend transparent by setting the alpha channel value.

    leg.get_frame().set_alpha(0.5)
    

  

You are currently reading a PREVIEW of this book.

                                                                                        

Get instant access to over
$1 million worth of books and videos.

  

Start a Free Trial