Ошибка рендеринга боке макета Holoviews

У меня возникли проблемы с пониманием того, почему следующая структура объекта holoviews не может быть отображена с использованием боке:

:NdLayout   [dim1]
   :HoloMap   [dim2]
      :Overlay
         .Scatter.I  :Scatter   [a]   (b)
         .Scatter.II :Scatter   [a]   (b,c)

Если я попытаюсь экспортировать его в статический файл HTML с помощью holoviews.save, я получу следующую ошибку:

Traceback (most recent call last):

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/bokeh/element.py", line 1268, in _init_glyphs
    style = self._apply_transforms(element, data, ranges, style)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/bokeh/element.py", line 1076, in _apply_transforms
    group=group, **kwargs)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/bokeh/element.py", line 1782, in _get_colormapper
    cmapper = colormapper(palette=palette, **opts)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/bokeh/models/mappers.py", line 141, in __init__
    super().__init__(**kwargs)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/bokeh/models/mappers.py", line 91, in __init__
    super().__init__(**kwargs)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/bokeh/model.py", line 234, in __init__
    super().__init__(**kwargs)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/bokeh/core/has_props.py", line 247, in __init__
    setattr(self, name, value)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/bokeh/core/has_props.py", line 274, in __setattr__
    super().__setattr__(name, value)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/bokeh/core/property/descriptors.py", line 539, in __set__
    self._internal_set(obj, value, setter=setter)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/bokeh/core/property/descriptors.py", line 760, in _internal_set
    value = self.property.prepare_value(obj, self.name, value)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/bokeh/core/property/bases.py", line 331, in prepare_value
    raise e

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/bokeh/core/property/bases.py", line 324, in prepare_value
    self.validate(value)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/bokeh/core/property/either.py", line 109, in validate
    raise ValueError(msg)

ValueError: expected an element of either Seq(String), Seq(Tuple(String, String)) or Seq(Tuple(String, String, String)), got [nan]


During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "<ipython-input-109-fac255f6253f>", line 1, in <module>
    hv.save(data_shuffle_overlap_z, saveDir_plot/f'layout_z_overlap.png')

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/util/__init__.py", line 799, in save
    return renderer_obj.save(obj, filename, fmt=fmt, resources=resources)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/renderer.py", line 547, in save
    plot, fmt = self_or_cls._validate(obj, fmt)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/renderer.py", line 287, in _validate
    plot = self.get_plot(obj, renderer=self, **kwargs)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/bokeh/renderer.py", line 73, in get_plot
    plot = super(BokehRenderer, self_or_cls).get_plot(obj, doc, renderer, **kwargs)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/renderer.py", line 232, in get_plot
    plot.update(init_key)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/plot.py", line 879, in update
    item = self.__getitem__(key)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/plot.py", line 437, in __getitem__
    if not self.drawn: self.handles['fig'] = self.initialize_plot()

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/bokeh/plot.py", line 909, in initialize_plot
    subplots = subplot.initialize_plot(ranges=ranges, plots=shared_plots)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/bokeh/plot.py", line 1053, in initialize_plot
    adjoined_plots.append(subplot.initialize_plot(ranges=ranges, plots=passed_plots))

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/bokeh/element.py", line 2175, in initialize_plot
    child = subplot.initialize_plot(ranges, plot, plots)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/bokeh/element.py", line 1317, in initialize_plot
    self._init_glyphs(plot, element, ranges, source)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/plotting/bokeh/element.py", line 1268, in _init_glyphs
    style = self._apply_transforms(element, data, ranges, style)

  File "/home/maxime/anaconda3/envs/spy/lib/python3.7/site-packages/holoviews/core/options.py", line 227, in __exit__
    raise AbbreviatedException(etype, value, traceback)

AbbreviatedException: expected an element of either Seq(String), Seq(Tuple(String, String)) or Seq(Tuple(String, String, String)), got [nan]

Кто-нибудь знает, как я могу заставить это работать?

Составной объект был создан с кодом, выглядящим так:

import pandas as pd
import hvplot.pandas
import holoviews as hv

df1=pd.DataFrame({'dim1':[3,4,5], 'dim2':[1,1,2], 'a':[1,2,3], 'b':[1,2,3], 'c':[1,2,3]})
df2=df1.copy()
scatter1=df1.hvplot.scatter(x='a', y='b', c='c', groupby=['dim1', 'dim2'])
scatter2=df2.hvplot.scatter(x='a', y='b', c='grey', groupby=['dim1', 'dim2'])
hv.save(scatter1.layout('dim1'), 'object.html') # this works

composite_object = (scatter1*scatter2).collate().layout('dim1') # holoviews will create a slider to explore 'dim2', implicitly
hv.save(composite_object, 'object.html') # leads to AbbreviatedException when rendering to bokeh

Спасибо за вашу помощь!


person Maxime Beau    schedule 20.06.2020    source источник
comment
В контексте ошибки содержится важная информация. Вы должны опубликовать полную трассировку, если не здесь, то через ссылку на общедоступную суть и т. Д. Навскидку, возможно, похоже, что категориальные факторы диапазона имеют значение NaN. Это может быть проблема с вашим кодом или проблема с holoviews. Но нет никакого способа спекулировать без дополнительной информации. Для расследования может потребоваться полный репродуктор.   -  person bigreddot    schedule 20.06.2020
comment
Спасибо, что нашли время, чтобы ответить мне - я только что отредактировал вопрос с полной информацией об отслеживании ошибок, как и было рекомендовано.   -  person Maxime Beau    schedule 21.06.2020
comment
Таким образом, ваш код выше работает для меня с предстоящими Bokeh 2.1.1 RC и Bokeh 2.0.2 и любыми версиями пакетов Holovis, которые я установил. Еще одна вещь, которую всегда следует предоставлять, — это подробная информация о версии.   -  person bigreddot    schedule 21.06.2020


Ответы (1)


Обновление: проблема решена, но, к сожалению, повторно воспроизвести ошибку не удалось. Я просто пересчитал df2 с нуля вместо того, чтобы загружать его из ранее сохраненного экземпляра.

Это было как-то связано с тем, что «dim1» df1 и df2 не полностью совпадали, но я не знаю, каким именно образом. Извините за этот бесполезный пост.

person Maxime Beau    schedule 23.06.2020