如何在Bokeh中设置默认样式?

时间:2017-02-01 18:59:25

标签: python matplotlib plot bokeh

我正在撰写一份报告,其图表全部使用Matplotlib呈现。我调整了Matplotlib的默认值以确保所有绘图都具有相同的样式。

但是,我需要使用Bokeh,因为它提供了对Datashader渲染图例的支持 - Bokeh的人正在开发的库。

我的问题是默认的Bokeh样式与我的自定义样式有很大不同。我可以以BokehBokeh类似的方式从样式表中读取Matplotlib,而不是更改plt.use.style(['ggplot'])图中的每个属性吗?

1 个答案:

答案 0 :(得分:2)

截至Bokeh 0.12.4,在Bokeh中仍然存在未解决的问题(开发的功能以及一些错误,以及更多的文档支持)。目前支持的是使用可在当前文档上设置的Theme对象的基于类型的主题。

Theme对象采用一般形式的JSON块:

 { 
   'attrs: {
       'SomeTypeName': { 'foo_property': default_foo },
       'OtherTypeName': { 'bar_property': default_bar }
   }
 }

或者是一个具体的例子:

from bokeh.io import curdoc
from bokeh.themes import Theme

curdoc().theme = Theme(json={'attrs': {

    # apply defaults to Figure properties
    'Figure': {
        'toolbar_location': None,
        'outline_line_color': None,
        'min_border_right': 10,
    },

    # apply defaults to Axis properties
    'Axis': {
        'major_tick_in': None,
        'minor_tick_out': None,
        'minor_tick_in': None,
        'axis_line_color': '#CAC6B6',
        'major_tick_line_color': '#CAC6B6',
    },

     # apply defaults to Legend properties
    'Legend': {
        'background_fill_alpha': 0.8,
    }
}})

也可以使用标准的Python JSON工具从文件中读取此JSON。

如果这也恰好位于(目录样式)Bokeh服务器应用程序的上下文中,您还可以将主题作为theme.yaml文件提供在与main.py相同的目录中。例如,参见Gapminder example