Description
What is your issue?
When trying to use the plot-method on a DataArray that contains a time axis with time zone aware pandas Timestamps a TypeError is raised.
As a minimal example:
import pandas as pd
import numpy as np
import xarray as xr
time = pd.date_range("2000-02-02 08:00+01:00","2000-02-02 09:00+01:00", 121)
val = np.arange(121)**2
xar = xr.DataArray(val, coords=dict(time=time))
xar.plot()
Results in:
TypeError: Plotting requires coordinates to be numeric, boolean, or dates of type numpy.datetime64, datetime.datetime, cftime.datetime or pandas.Interval. Received data of type object instead.
While matplotlib is capable of handling it. Not in a nice way, but at least without crashing:
import matplotlib.pyplot as plt
plt.figure()
plt.plot(xar.time, xar.values)
I tried that the same result can be achieved, if in the method issuing the TypeError
Lines 669 to 681 in 830ee6d
also accepts the pandas
DatetimeTZDtype
as a dtype, i.e. it is added to the tuple numpy_types
.
If there are no objections I would issue a PR extending the tuple.
Related observations
_ensure_plottable removal
I found discussions on removing the _ensure_plottable
method entirely (#5762, #5763), which was not followed through but would likely also solve this issue.
Pandas
Pandas itself is able to even plot the time stamps in a nice way. So, maybe in the long-term it might make sense to use these capabilities.
xar.to_series().plot()