This will help if you show how df defined. What does df.info() report? This will show us the column types.
There are many ways to represent dates: like strings, ints, float, datetime.datetime, NumPy datetime64s, Pandas timestamps or Pandas DatetimeIndex. The right way to build depends on what you have.
Here is an example showing that your code works if df.index is DatetimeIndex:
import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy import stats index = pd.date_range(start='2000-1-1', end='2015-1-1', freq='M') N = len(index) poisson = (stats.poisson.rvs(1000, size=(N,3))/100.0) poisson.sort(axis=1) df = pd.DataFrame(poisson, columns=['lwr', 'Rt', 'upr'], index=index) plt.fill_between(df.index, df.lwr, df.upr, facecolor='blue', alpha=.2) plt.plot(df.index, df.Rt, '.') plt.show()

If the index has string representations of dates, then (with Matplotlib version 1.4.2) you will get a TypeError:
import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy import stats index = pd.date_range(start='2000-1-1', end='2015-1-1', freq='M') N = len(index) poisson = (stats.poisson.rvs(1000, size=(N,3))/100.0) poisson.sort(axis=1) df = pd.DataFrame(poisson, columns=['lwr', 'Rt', 'upr']) index = [item.strftime('%Y-%m-%d') for item in index] plt.fill_between(index, df.lwr, df.upr, facecolor='blue', alpha=.2) plt.plot(index, df.Rt, '.') plt.show()
gives
File "/home/unutbu/.virtualenvs/dev/local/lib/python2.7/site-packages/numpy/ma/core.py", line 2237, in masked_invalid condition = ~(np.isfinite(a)) TypeError: Not implemented for this type
In this case, the fix is intended to convert strings to timestamps:
index = pd.to_datetime(index)