Как установить параметры галочки и шрифта Bokeh в HoloViews?

Я хотел бы настроить свои параметры по умолчанию в HoloViews, чтобы они соответствовали тем, которые я использовал в своих графиках Bokeh, но, хотя я могу найти много эквивалентов в документации HoloViews, я не могу понять, каковы эквиваленты для других.

Например, я начал с тех, которые можно найти в документации HoloViews, используя

opts.defaults(
    opts.Scatter(fill_color='black', line_color='gray', fill_alpha=0.1, line_alpha=1.0, 
                 hover_fill_color='yellow', hover_line_color='black', hover_fill_alpha=1.0, hover_line_alpha=1.0,
                 nonselection_fill_color='gray', nonselection_line_color=None, nonselection_alpha=0.2, 
                 selection_fill_color='black', selection_line_color='white', selection_alpha=1.0, 
                 size=6, line_width=1),
    opts.Histogram(fill_color='gray', fill_alpha=0.9, line_width=1, line_color='gray'),
    opts.Text(text_color='green')
)

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

p = figure(...)
# ...

p.xaxis.axis_label = x_label
p.yaxis.axis_label = y_label
p.xaxis.axis_label_text_font = FONT
p.axis.axis_label_text_color = "gray"
p.axis.axis_label_text_font_style = "normal"

p.axis.axis_line_color = "gray"
p.axis.major_label_text_color = "gray"

p.axis.major_tick_line_color = "gray"
p.axis.minor_tick_line_color = "gray"

p.axis.minor_tick_in = 0
p.axis.major_tick_in = 0
p.axis.major_tick_out = 5  
p.axis.minor_tick_out = 2

p.grid.grid_line_alpha = 0.5
p.grid.grid_line_dash = [6, 4]

p.title.text_color = "gray"
p.title.text_font = FONT
p.title.text_font_style = "normal"

p.title.align = "center"

p.toolbar.autohide = True

но я не уверен, как установить их в HoloViews с помощью opts.defaults.

Как установить эти параметры с помощью HoloViews? Возможно, существует какой-то общий механизм для «передачи» этих параметров боке в HoloViews в opts.defaults?


person orome    schedule 05.04.2019    source источник


Ответы (1)


Согласно документации вы должны иметь возможность получить ссылку на объект Bokeh Figure и установить как минимум некоторые атрибуты, использующие plot hooks:

import numpy as np
import holoviews as hv

hv.extension('bokeh')

def hook(plot, element):
    print('plot.state:   ', plot.state)
    print('plot.handles: ', sorted(plot.handles.keys()))
    print(plot.handles['xaxis'])
    print(plot.state.grid)
    print(plot.state.title)

    plot.state.title.align = "center"
    plot.state.title.text = 'Scatter Plot'

    plot.handles['xaxis'].minor_tick_in = 0
    plot.handles['xaxis'].major_tick_in = 0
    plot.handles['xaxis'].major_tick_out = 5
    plot.handles['xaxis'].minor_tick_out = 2
    plot.handles['xaxis'].axis_label = 'X-AXIS-GREEN'
    plot.handles['yaxis'].axis_label = 'Y-AXIS-RED'
    plot.handles['xaxis'].axis_label_text_color = 'green'
    plot.handles['yaxis'].axis_label_text_color = 'red'

    plot.handles['yaxis'].axis_label_text_color = 'red'

scatter = hv.Points(np.random.randn(1000, 2))
scatter = scatter.opts(hooks = [hook])

renderer = hv.renderer('bokeh')
renderer.save(scatter, 'testHV')

Результат:

введите здесь описание изображения

person Tony    schedule 08.04.2019
comment
Это довольно низкий уровень. Так что просто для подтверждения: нет никакого свойства для установки стилей на осях, кроме механизма hook? А как насчет настройки начертания шрифта? - person orome; 09.04.2019
comment
HoloViews абстрагирует создание сюжета, но это имеет свою цену. Только прямой доступ к серверной части обеспечивает доступ к его (низкоуровневым) атрибутам. Вы можете установить стиль шрифта так же, как указано выше. Никаких других вариантов не знаю. - person Tony; 09.04.2019
comment
Прохладный. Пока это идиома, она имеет смысл. - person orome; 09.04.2019
comment
Есть идеи, как настроить соответствующие параметры по умолчанию для Matplotlib? Очевидный подход, когда opts.defaults(..., backend='matplotlib') работает только частично (некоторые параметры игнорируются, другие вызывают предупреждение о том, что они неверны для бэкэнда Bokeh). Возможно, это отдельный вопрос, но, возможно, есть быстрый ответ, позволяющий избежать параллельного вопроса. - person orome; 10.04.2019
comment
Подробнее об этом, поскольку это применимо к нескольким серверным ВМ и единообразному внешнему виду во всех серверных ВМ, здесь. - person orome; 10.04.2019