-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
What happened?
When setting axis limits is in matplotlib.:
ax.set_xlim(["2002-01-03","2002-01-20"])
A conversion error is raised.
IndexError Traceback (most recent call last)
File C:\work\miniconda3\envs\XROMStest\lib\site-packages\matplotlib\axis.py:1507, in Axis.convert_units(self, x)
1506 try:
-> 1507 ret = self.converter.convert(x, self.units, self)
1508 except Exception as e:
File C:\work\miniconda3\envs\XROMStest\lib\site-packages\matplotlib\dates.py:1921, in _SwitchableDateConverter.convert(self, *args, **kwargs)
1920 def convert(self, *args, **kwargs):
-> 1921 return self._get_converter().convert(*args, **kwargs)
File C:\work\miniconda3\envs\XROMStest\lib\site-packages\matplotlib\dates.py:1850, in DateConverter.convert(value, unit, axis)
1844 """
1845 If value is not already a number or sequence of numbers, convert it
1846 with date2num
.
1847
1848 The unit and axis arguments are not used.
1849 """
-> 1850 return date2num(value)
File C:\work\miniconda3\envs\XROMStest\lib\site-packages\matplotlib\dates.py:443, in date2num(d)
441 return d
--> 443 tzi = getattr(d[0], 'tzinfo', None)
444 if tzi is not None:
445 # make datetime naive:
IndexError: too many indices for array: array is 0-dimensional, but 1 were indexed
The above exception was the direct cause of the following exception:
ConversionError Traceback (most recent call last)
Input In [4], in
10 fig, ax = plt.subplots()
11 ax.plot(times, y)
---> 12 ax.set_xlim(["2002-01-03","2002-01-20"])
File C:\work\miniconda3\envs\XROMStest\lib\site-packages\matplotlib\axes_base.py:3689, in _AxesBase.set_xlim(self, left, right, emit, auto, xmin, xmax)
3686 right = xmax
3688 self._process_unit_info([("x", (left, right))], convert=False)
-> 3689 left = self._validate_converted_limits(left, self.convert_xunits)
3690 right = self._validate_converted_limits(right, self.convert_xunits)
3692 if left is None or right is None:
3693 # Axes init calls set_xlim(0, 1) before get_xlim() can be called,
3694 # so only grab the limits if we really need them.
File C:\work\miniconda3\envs\XROMStest\lib\site-packages\matplotlib\axes_base.py:3603, in _AxesBase._validate_converted_limits(self, limit, convert)
3592 """
3593 Raise ValueError if converted limits are non-finite.
3594
(...)
3599 The limit value after call to convert(), or None if limit is None.
3600 """
3601 if limit is not None:
-> 3603 converted_limit = convert(limit)
3604 if (isinstance(converted_limit, Real)
3605 and not np.isfinite(converted_limit)):
3606 raise ValueError("Axis limits cannot be NaN or Inf")
File C:\work\miniconda3\envs\XROMStest\lib\site-packages\matplotlib\artist.py:252, in Artist.convert_xunits(self, x)
250 if ax is None or ax.xaxis is None:
251 return x
--> 252 return ax.xaxis.convert_units(x)
File C:\work\miniconda3\envs\XROMStest\lib\site-packages\matplotlib\axis.py:1509, in Axis.convert_units(self, x)
1507 ret = self.converter.convert(x, self.units, self)
1508 except Exception as e:
-> 1509 raise munits.ConversionError('Failed to convert value(s) to axis '
1510 f'units: {x!r}') from e
1511 return ret
ConversionError: Failed to convert value(s) to axis units: '2002-01-03'
When we downgrade to xarray=0.20..2. axis limits are changed as expected.
What did you expect to happen?
ax.set_xlim should interpert dates of format "YYYY-MM-DD" correctly and scale the xaxis appropriately.
Minimal Complete Verifiable Example
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
times = np.arange(np.datetime64('2001-01-02'),
np.datetime64('2002-02-03'), np.timedelta64(75, 'm'))
y = np.random.randn(len(times))
fig, ax = plt.subplots()
ax.plot(times, y)
ax.set_xlim(["2002-01-03","2002-01-20"])
Relevant log output
No response
Anything else we need to know?
It appears that matplotlib uses a pandas date converter when using xarray 0.20.2 is imported but not for xarray 0.21.1.
Environment
INSTALLED VERSIONS
commit: None
python: 3.8.12 | packaged by conda-forge | (default, Oct 12 2021, 21:22:46) [MSC v.1916 64 bit (AMD64)]
python-bits: 64
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 140 Stepping 1, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None
LOCALE: ('English_United States', '1252')
libhdf5: 1.12.1
libnetcdf: 4.8.1
xarray: 0.21.1
pandas: 1.4.0
numpy: 1.21.5
scipy: 1.8.0
netCDF4: 1.5.8
pydap: None
h5netcdf: None
h5py: None
Nio: None
zarr: 2.11.0
cftime: 1.5.2
nc_time_axis: None
PseudoNetCDF: None
rasterio: None
cfgrib: None
iris: None
bottleneck: None
dask: 2022.01.1
distributed: 2022.01.1
matplotlib: 3.5.1
cartopy: 0.20.2
seaborn: None
numbagg: None
fsspec: 2022.01.0
cupy: None
pint: None
sparse: None
setuptools: 59.8.0
pip: 22.0.3
conda: None
pytest: None
IPython: 8.0.1
sphinx: None