I get a ValueError when trying to create a colorbar based on date. It works on other fields e.g. lat
import geopandas as gpd
import holoviews
import hvplot.pandas
import numpy as np
import pandas as pd
date_range = pd.date_range("2020-01-01", periods=5)
lat = np.random.randint(-90, high=90, size=len(date_range))
lon = np.random.randint(-180, high=180, size=len(date_range))
df = pd.DataFrame({"date": date_range, "lat": lat, "lon": lon})
gdf = gpd.GeoDataFrame(
df,
geometry=gpd.points_from_xy(df["lon"], df["lat"]),
crs="epsg:4326",
)
gdf.hvplot(c="date")
gives
holoviews.ipython.show_traceback()
Traceback (most recent call last):
File "/Users/ray/miniconda3/envs/main/lib/python3.9/site-packages/holoviews/plotting/bokeh/element.py", line 1360, in _init_glyphs
style = self._apply_transforms(element, data, ranges, style)
File "/Users/ray/miniconda3/envs/main/lib/python3.9/site-packages/holoviews/plotting/bokeh/element.py", line 1160, in _apply_transforms
cmapper = self._get_colormapper(v, element, ranges,
File "/Users/ray/miniconda3/envs/main/lib/python3.9/site-packages/holoviews/plotting/bokeh/element.py", line 1930, in _get_colormapper
cmapper = colormapper(palette=palette, **opts)
File "/Users/ray/miniconda3/envs/main/lib/python3.9/site-packages/bokeh/models/mappers.py", line 97, in __init__
super().__init__(**kwargs)
File "/Users/ray/miniconda3/envs/main/lib/python3.9/site-packages/bokeh/model/model.py", line 128, in __init__
super().__init__(**kwargs)
File "/Users/ray/miniconda3/envs/main/lib/python3.9/site-packages/bokeh/core/has_props.py", line 206, in __init__
setattr(self, name, value)
File "/Users/ray/miniconda3/envs/main/lib/python3.9/site-packages/bokeh/core/has_props.py", line 230, in __setattr__
return super().__setattr__(name, value)
File "/Users/ray/miniconda3/envs/main/lib/python3.9/site-packages/bokeh/core/property/descriptors.py", line 283, in __set__
value = self.property.prepare_value(obj, self.name, value)
File "/Users/ray/miniconda3/envs/main/lib/python3.9/site-packages/bokeh/core/property/bases.py", line 365, in prepare_value
raise ValueError(f"failed to validate {obj_repr}.{name}: {error}")
ValueError: failed to validate CategoricalColorMapper(id='1075', ...).factors: expected an element of either Seq(String), Seq(Tuple(String, String)) or Seq(Tuple(String, String, String)), got [numpy.datetime64('2020-01-01T00:00:00.000000000'), numpy.datetime64('2020-01-02T00:00:00.000000000'), numpy.datetime64('2020-01-03T00:00:00.000000000'), numpy.datetime64('2020-01-04T00:00:00.000000000'), numpy.datetime64('2020-01-05T00:00:00.000000000')]
Work around is
df["day_number"] = (df["date"] - df["date"].min()).dt.days