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

5

我正在撰写一份报告,其中所有的图形都是用Matplotlib绘制的。我已经调整了Matplotlib的默认设置,以确保所有的图形风格相同。

然而,由于Bokeh支持Datashader(一种由Bokeh团队开发的库)的渲染图例,我需要使用Bokeh

我的问题是,默认的Bokeh风格与我的自定义风格非常不同。我是否可以让Bokeh从样式表中读取样式,类似于Matplotlibplt.use.style(['ggplot'])的方式?

1个回答

3
截至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示例


谢谢,@bigreddot 这些信息非常有帮助,我会保存下来以备将来参考。Bokeh 是一个很有前景的库。然而,我发现 Bokeh 不允许我通过编程的方式将图像保存为 png 格式,所以,遗憾的是,我不得不放弃原本非常优秀的 Datashader 库。相反,我选择将 eq_hist 改编成了 matplotlib 的流程。 - gzagatti
我不明白。Datashader 不需要 Bokeh,Datashader 本身就可以生成图像。事实上,这就是它的全部功能:Datashader 只能生成图像。与 Bokeh 的交互式集成只是使用 Bokeh 在浏览器中显示图像,并报告交互(如平移和缩放),以便生成新的图像。Bokeh 无法保存图像(但尚未支持),但您可以独立使用 Datashader 来保存图像。顺便说一句,在某个地方还有一个 MPL+Datashader 集成。 - bigreddot
感谢反馈。我不知道 MPL+Datashader 集成的事情。但是我真正需要的是从 Datashader 中获得制作图例的能力。我找不到这个功能,我的搜索结果指向了这里,它使用 Bokeh 来创建离散化的图例,这就是我开始使用 Bokeh 的原因。 - gzagatti
MPL支持目前仅为原型:https://github.com/bokeh/datashader/pull/200 只要让MPL执行颜色映射,添加颜色条很简单,如果您想从图例中获得这个。 - James A. Bednar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接