【问题标题】:How do I set Bokeh tick and font options in HoloViews?如何在 HoloViews 中设置散景刻度和字体选项?
【发布时间】:2019-04-09 17:36:49
【问题描述】:

我想在 HoloViews 中配置我的默认选项以匹配我在散景图中一直使用的选项,但是虽然我可以在 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')
)

但对于许多其他人,特别是与字体和对刻度长度和颜色的控制有关的,我找不到等价物。在散景中,我可以为给定的情节设置我感兴趣的这些选项,例如

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

但我不确定如何使用 opts.defaults 在 HoloViews 中设置这些。

如何使用 HoloViews 设置这些选项?是否有一些通用机制可以将这些散景选项“传递”到opts.defaults 中的 HoloViews?

【问题讨论】:

    标签: bokeh options holoviews


    【解决方案1】:

    根据documentation,您应该能够获得对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')
    

    结果:

    【讨论】:

    • 这是相当低的水平。所以只是为了确认:除了hook 机制之外,没有用于在轴上设置样式的属性?设置字体呢?
    • HoloViews 抽象了绘图的创建,但这也是有代价的。只有直接访问后端才能访问其(低级)属性。您可以按照与上述相同的方式设置字体样式。我不知道还有什么其他选择。
    • 酷。只要是成语,都是有道理的。
    • 知道如何为 Matplotlib 设置相应的默认选项吗?具有opts.defaults(..., backend='matplotlib') 的明显方法仅部分有效(某些选项被忽略,其他选项会引起关于 Bokeh 后端错误的警告)。也许是一个单独的问题,但也许有一个可以避免平行问题的快速答案。
    • 更多关于这方面的信息,因为它适用于多个后端,并且在后端具有一致的外观here
    猜你喜欢
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多