Как добавить пользовательскую линию в сюжет BoxWhisker holoviews? - PullRequest
0 голосов
/ 01 мая 2019

Мне нужно добавить горизонтальную линию в поле.Посмотрел руководство holoviews и, похоже, HLine предполагается использовать в таком случае.К сожалению, я получаю сообщение об ошибке:

ValueError: all the input arrays must have same number of dimensions

Пример:

import numpy as np
import holoviews as hv
from holoviews import opts

hv.extension('bokeh')

groups = [chr(65+g) for g in np.random.randint(0, 3, 200)]

boxwhisker = hv.BoxWhisker(
    (groups, np.random.randint(0, 5, 200), np.random.randn(200)),
    ['Group', 'Category'], 
    'Value'
).sort() * hv.HLine(1)

boxwhisker.opts(
    opts.BoxWhisker(
        box_color='white', 
        height=400, 
        show_legend=False, 
        whisker_color='gray', 
        width=600
    ),
    opts.HLine(color='green', line_width=2)
)

layout = hv.Layout(boxwhisker)
hv.save(layout, 'boxplot.html')

Traceback:

File "/home/python3.6/site-packages/holoviews/plotting/renderer.py", line 545, in save
    plot = self_or_cls.get_plot(obj)
  File "/home/python3.6/site-packages/holoviews/plotting/bokeh/renderer.py", line 135, in get_plot
    plot = super(BokehRenderer, self_or_cls).get_plot(obj, renderer, **kwargs)
  File "/home/python3.6/site-packages/holoviews/plotting/renderer.py", line 207, in get_plot
    plot.update(init_key)
  File "/home/python3.6/site-packages/holoviews/plotting/plot.py", line 595, in update
    return self.initialize_plot()
  File "/home/python3.6/site-packages/holoviews/plotting/bokeh/plot.py", line 995, in initialize_plot
    subplots = subplot.initialize_plot(ranges=ranges, plots=shared_plots)
  File "/home/python3.6/site-packages/holoviews/plotting/bokeh/plot.py", line 1115, in initialize_plot
    adjoined_plots.append(subplot.initialize_plot(ranges=ranges, plots=passed_plots))
  File "/home/python3.6/site-packages/holoviews/plotting/bokeh/element.py", line 2058, in initialize_plot
    self._update_ranges(element, ranges)
  File "/home/python3.6/site-packages/holoviews/plotting/bokeh/element.py", line 747, in _update_ranges
    xfactors, yfactors = self._get_factors(element, ranges)
  File "/home/python3.6/site-packages/holoviews/plotting/bokeh/element.py", line 2031, in _get_factors
    xfactors = np.concatenate(xfactors)
ValueError: all the input arrays must have same number of dimensions

1 Ответ

0 голосов
/ 03 мая 2019

Да, HLine - верный способ сделать это, но, к сожалению, поддержка категориальных осей в HoloViews в настоящее время ограничена и не позволяет такое наложение.Была проделана некоторая работа над незаконченной альтернативной реализацией для категориальных осей , которая бы исправила это.В то же время, я бы предположил, что вы можете добавить пользовательский хук , но это было бы неудобно выяснить.

Обратите внимание, что hv.Layout(boxwhisker) не будет работать, как у вас выше, в любом случае;это должно быть hv.Layout([boxwhisker]) или просто boxwhisker (поскольку Layout принимает список, но здесь вам даже не нужен макет, поскольку у вас есть только один элемент).

...