Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork8.1k
Closed
Milestone
Description
Bug report
ax.bar() fails if the input data has units. This is a fairly new bug as it worked fine at some point in the past. The exception is:
/home/trd/work/git/matplotlib/build/lib.linux-x86_64-3.6/matplotlib/axes/_base.py:2500: RuntimeWarning: invalid value encountered in double_scalars delta = (x1t - x0t) * marginThe issue is that the unit conversion code is being run after a call to np.broadcast_arrays so that the x values are not actually arrays, they're still lists of units. The fix is re-order the code in bar() so that the unit conversion happens first.
Code for reproduction
I'll send in a pull request w/ a fix once I can get the right version of free type to install so I can run existing tests and create a baseline file. This occurs on the current master branch code.
New test case being added to test_units.py which will throw the exception:
@image_comparison(baseline_images=['jpl_bar_units'], extensions=['png'], savefig_kwarg={'dpi': 60})def test_jpl_bar_units(): from datetime import datetime import matplotlib.testing.jpl_units as units units.register() day = units.Duration("ET", 24.0 * 60.0 * 60.0) x = [units.Epoch("ET", dt=datetime(2009, 4, 25)), units.Epoch("ET", dt=datetime(2009, 4, 26)), units.Epoch("ET", dt=datetime(2009, 4, 27))] width = [3*day, 2*day, 1*day] fig, ax = plt.subplots() ax.bar(x, width)