Time for action – shading plot regions based on a condition

Imagine that you want to shade the region of a stock chart, where the closing price is below average, with a different color than when it is above the mean. The fill_between function is the best choice for the job. We will again omit the steps of downloading historical data going back 1 year, extracting dates and close prices, and creating locators and date formatter.

  1. Create a Matplotlib figure object.
    fig = plt.figure()
  2. Add a subplot to the figure.
    ax = fig.add_subplot(111)
  3. Plot the closing price.
    ax.plot(dates, close)
  4. Shade the regions of the plot below the closing price using different colors depending whether the values are below or above the average price.
    plt.fill_between(dates, close.min(), close, where=close>close.mean(), facecolor="green", alpha=0.4)
    plt.fill_between(dates, close.min(), close,
      where=close<close.mean(), facecolor="red", alpha=0.4)

    Now we can finish the plot by setting locators and formatting the x-axis values as dates. The stock price using conditional shading for DISH:

    Time for action – shading plot regions based on a condition

What just happened?

We shaded the region of a stock chart, where the closing price is below average, with a different color than when it is above the mean (see fillbetween.py):

from matplotlib.finance import quotes_historical_yahoo
from matplotlib.dates import DateFormatter 
from matplotlib.dates import DayLocator 
from matplotlib.dates import MonthLocator
import sys
from datetime import date
import matplotlib.pyplot as plt
import numpy as np

today = date.today()
start = (today.year - 1, today.month, today.day)

symbol = 'DISH’

if len(sys.argv) == 2:
   symbol = sys.argv[1]

quotes = quotes_historical_yahoo(symbol, start, today)
quotes = np.array(quotes)
dates = quotes.T[0]
close = quotes.T[4]


alldays = DayLocator()              
months = MonthLocator()
month_formatter = DateFormatter("%b %Y")

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(dates, close)
plt.fill_between(dates, close.min(), close, where=close>close.mean(), facecolor="green", alpha=0.4)
plt.fill_between(dates, close.min(), close, where=close<close.mean(), facecolor="red", alpha=0.4)
ax.xaxis.set_major_locator(months)
ax.xaxis.set_minor_locator(alldays)
ax.xaxis.set_major_formatter(month_formatter)
ax.grid(True)
fig.autofmt_xdate()
plt.show()
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.226.4.239