Skip to content

Make error when trying to plot numerical data on datetime axis clearer #9211

Closed
@dstansby

Description

@dstansby

Bug report

Bug summary
Plotting datetime values first, and then trying to plot numerical data raises the confusing error message below, and then a blank window appears.

Code for reproduction

import matplotlib.pyplot as plt
from datetime import datetime

fig, ax = plt.subplots()
ax.plot(datetime(2017, 1, 1), 1)
ax.plot(1, 1)
plt.show()

Actual outcome

Traceback (most recent call last):
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/backends/backend_macosx.py", line 136, in _draw
    self.figure.draw(renderer)
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/artist.py", line 63, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/figure.py", line 1144, in draw
    renderer, self, dsu, self.suppressComposite)
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/image.py", line 139, in _draw_list_compositing_images
    a.draw(renderer)
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/artist.py", line 63, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 2426, in draw
    mimage._draw_list_compositing_images(renderer, self, dsu)
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/image.py", line 139, in _draw_list_compositing_images
    a.draw(renderer)
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/artist.py", line 63, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/axis.py", line 1136, in draw
    ticks_to_draw = self._update_ticks(renderer)
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/axis.py", line 969, in _update_ticks
    tick_tups = [t for t in self.iter_ticks()]
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/axis.py", line 969, in <listcomp>
    tick_tups = [t for t in self.iter_ticks()]
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/axis.py", line 912, in iter_ticks
    majorLocs = self.major.locator()
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/dates.py", line 986, in __call__
    self.refresh()
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/dates.py", line 1006, in refresh
    dmin, dmax = self.viewlim_to_dt()
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/dates.py", line 763, in viewlim_to_dt
    return num2date(vmin, self.tz), num2date(vmax, self.tz)
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/dates.py", line 401, in num2date
    return _from_ordinalf(x, tz)
  File "/Users/dstansby/miniconda3/lib/python3.6/site-packages/matplotlib/dates.py", line 254, in _from_ordinalf
    dt = datetime.datetime.fromordinal(ix).replace(tzinfo=UTC)
ValueError: ordinal must be >= 1

Expected outcome

A sensible error message is raised, telling the user that numerical data can't be plotted on a datetime axis

Matplotlib version

  • Operating System: OSX
  • Matplotlib Version: master branch
  • Python Version: 3.6.2

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions