title: MatPlotLib, datetimes, and TypeError: ufunc 'isfinite' not supported for the input types…
body: <p>Here is a tiny piece of code that produces a filled in region between two lines of a graph:</p>
  
  <pre><code>import matplotlib.pyplot as plt
  import numpy as np
  
  x = np.arange(0.0, 2, 0.01)
  y1 = np.sin(2 * np.pi * x)
  y2 = 1.2 * np.sin(4 * np.pi * x)
  
  fig, ax1 = plt.subplots(1, 1, sharex=True)
  
  # Test support for masked arrays.
  ax1.fill_between(x, 0, y1)
  ax1.set_ylabel('between y1 and 0')
  y2 = np.ma.masked_greater(y2, 1.0)
  ax1.plot(x, y1, x, y2, color='black')
  ax1.fill_between(
      x, y1, y2, where=y2 &gt;= y1,
      facecolor='green',
      interpolate=True)
  ax1.fill_between(x, y1, y2, where=y2 &lt;= y1, facecolor='red', interpolate=True)
  ax1.set_title('Now regions with y2&gt;1 are masked')
  
  # Show the plot.
  plt.show()
  </code></pre>
  
  <p>It looks like so:</p>
  
  <p><a href="https://i.stack.imgur.com/mMF5im.png" rel="noreferrer"><img src="https://i.stack.imgur.com/mMF5im.png" alt="Plot generated by the code"></a></p>
  
  <p>Now, changing the start so that <code>x</code> is now a collections of date times objects like so:</p>
  
  <pre><code>import datetime
  
  x1 = np.arange(0.0, 2, 0.01)
  now = np.datetime64(datetime.datetime.now())
  x = np.array([now - np.timedelta64(datetime.timedelta(seconds=i)) for i in range(200)])
  y1 = np.sin(2 * np.pi * x1)
  y2 = 1.2 * np.sin(4 * np.pi * x1)
  </code></pre>
  
  <p>yields:</p>
  
  <pre><code>Traceback (most recent call last):                                                File "fill_between_demo.py", line 21, in &lt;module&gt;                             
      ax1.fill_between(x, 0, y1)                                                  
    File "/home/usr/.virtualenvs/raiju/lib/python3.6/site-packages/matplotlib/__init__.py", line 1898, in inner                                                  
      return func(ax, *args, **kwargs)                                            
    File "/home/usr/.virtualenvs/raiju/lib/python3.6/site-packages/matplotlib/axes/_axes.py", line 4778, in fill_between                                         
      x = ma.masked_invalid(self.convert_xunits(x))                               
    File "/home/usr/.virtualenvs/raiju/lib/python3.6/site-packages/numpy/ma/core.py", line 2388, in masked_invalid                                               
      condition = ~(np.isfinite(a))                                               
  TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''     
  </code></pre>
  
  <p><em>Why is that happening and how to fix it?</em></p>
  
  <p>Note that plotting the data (aka not using <code>fill*</code>) works just fine.</p>