如何更改 bokeh.charts 轴标签大小?

How to alter bokeh.charts axis label size?

我使用的是 Bokeh 0.11.1,pip install --upgrade bokeh 报告说我使用的是最新版本。

如果使用 bokeh.plotting,我可以确定如何更改散景 x 轴文本大小参数,但不能在散景图表中更改。下面的代码,如果在 Jupyter notebook 中 运行,将显示非常紧凑的 x 轴标签。我希望字体更小 -- 关于如何实现这一点的任何提示?

import pandas as pd
data = pd.read_csv("https://raw.githubusercontent.com/pm0kjp/datastore/master/river_data.csv")

import bokeh.charts
import bokeh.plotting
bokeh.plotting.output_notebook()

tooltips=[
    ('Water Site ', '$x'),
    ('Average of Enterococcus Count ', '$y')
]

p = bokeh.charts.Scatter(data, x='Site', y='EnteroCount', 
        title="Swimming Holes By Average Enterococcus Count", ylabel="Enterococcus Count", tooltips=tooltips)
p.width=1000
bokeh.charts.show(p)

文档建议我可以简单地添加 p.yaxis.axis_label_text_font_size = "8pt",但如果我这样做,我会得到错误 AttributeError: 'Chart' object has no attribute 'yaxis'.

有一个完整的用户指南部分专门用于 styling visual properties, including how to style axis labels。由于 bokeh.chartsbokeh.plotting 创建的图都解析为同一组低级别对象,因此在任何一种情况下设置属性都是相同的:

p.yaxis.axis_label_text_font_size = "8pt"

这是 0.12.3 的完整工作示例:

In [1]: import bokeh

In [2]: bokeh.__version__
Out[2]: '0.12.3'

In [3]: import pandas as pd
   ...: data = pd.read_csv("https://raw.githubusercontent.com/pm0kjp/datastore/master/river_data.csv")
   ...:

In [4]: import bokeh.charts

In [5]: tooltips=[
   ...:     ('Water Site ', '$x'),
   ...:     ('Average of Enterococcus Count ', '$y')
   ...: ]
   ...: p = bokeh.charts.Scatter(data, x='Site', y='EnteroCount',
   ...:         title="Swimming Holes By Average Enterococcus Count", ylabel="Enterococcus Count", tooltips=tooltips)
   ...: p.width=1000
   ...:

In [6]: p.yaxis.axis_label_text_font_size = "4pt"

In [7]: bokeh.charts.output_file("/tmp/chart.html")

In [8]: bokeh.charts.show(p)

这是结果,带有微小的 y 轴标签:


如果您由于某种原因无法更新到版本 0.12,您可以这样做:

In [12]: from bokeh.models import Axis

In [13]: p.select(type=Axis)
Out[13]:
[LinearAxis(id='54b21a9f-22e0-4f7a-b809-8d4f755a444e', ...),
 CategoricalAxis(id='b52e7b2c-2b18-4578-be42-4fbfba17af60', ...)]

获取所有坐标轴对象,您可以通过设置它们 axis_label_text_font_size 属性 直接修改这些对象。但是你必须弄清楚哪个轴是 x 哪个是 y。