I get the same issue following the same example.
(Python 3.7.4, jupyter lab 2.1.2, holoviews 1.13.2, bokeh 2.0.2, running on Windows if that matters)
Using categorize after bin() with just the first arg instead of bins with a label arg works:
layout = hv.Layout([
points.relabel('Marker').opts(marker=dim('x').bin(bins).categorize({0.125: 'circle', 0.375: 'triangle', 0.625: 'diamond', 0.875: 'square'})),
])
Digging into things a bit:
points = hv.Points(np.random.rand(400,4))
bins= [0.0, .25, .5, .75, 1.0]
labels=['circle', 'triangle', 'diamond', 'square', 'circle']
bin_op = dim('Marker').bin(bins)
cated = dim(bin_op).categorize({0.125: 'circle', 0.375: 'triangle', 0.625: 'diamond', 0.875: 'square'})
ds = hv.Dataset(points.data, ['x', 'y'], ['Marker'])
cated.apply(ds)
gives an output of:
array(['triangle', 'diamond', ...
as expected. While:
bins= [0.0, .25, .5, .75, 1.0]
labels=['circle', 'triangle', 'diamond', 'square', 'circle']
bin_op = dim('Marker').bin(bins, labels)
ds = hv.Dataset(points.data, ['x', 'y'], ['Marker'])
bin_op.apply(ds)
gives the output:
array(['\uf440\udc74\uf000\udc69\uf180\udc6e\uf100\udc6c\x00\x00렲\udf70Տ', ... (continues with similar values)
Hope this helps.