这是对@MarkWeston已有答案的补充。让我们看下面这个最简示例:
from bokeh.io import show
from bokeh.models import ColumnDataSource, LabelSet
from bokeh.plotting import figure
p = figure()
source = ColumnDataSource(dict(x=[x for x in range(1,8)],
y=[1]*7,
names=[str(x) for x in range(1,8)]
)
)
p = figure(x_range=(0, 8), y_range=(0, 2), plot_height=100, tools='' )
labels = LabelSet(x='x', y='y', text='names', level='overlay', text_align='center',
x_offset=0, y_offset=-8, source=source, render_mode='canvas')
p.add_layout(labels)
p.circle(x='x', y='y', radius=0.3, alpha=0.3, source=source)
p.xgrid.visible = False
p.ygrid.visible = False
p.xaxis.visible = False
p.yaxis.visible = False
show(p)
这是
示例的输出。
现在我们可以按照 @MarkWeston 的答案预先设置所需的参数。如果创建一个
LabelSet
,则可以传递
LabelSet文档中解释的所有参数。
但是,如果您想在调用
p.add_layout()
之后更改设置,则还有第二种方法。
函数
p.add_layout(labels)
带有一个名为
place
的参数。有效值为
left
、
right
、
above
、
below
和默认值
center
。有关详细信息,请参见
add_layout文档。
为简化起见,假设您使用默认值
center
调用
add_layout()
函数。现在我们需要知道
LabelSet
在包含在
p.center
中的列表的哪个索引处。
我们可以通过运行以下命令来获取此信息:
[i for i, item in enumerate(p.center) if isinstance(item, LabelSet)]
>>> [2]
这将返回“2”。请注意,0和1处有不可见的网格。
现在我们可以通过调用以下行来更改LabelSet
的参数设置
p.center[2].text_color = {'value':'#0000ff'}
p.center[2].text_size = {'value':'11pt'}
p.center[2].text_size = 'TimesNewRoman'
还有许多其他的。
如果您使用show(p)
重新绘制图形,您可以看到更改,并且它看起来像这样。