Bokeh 使用 Bokeh 将图例放在绘图区域外
在本文中,我们将介绍如何使用 Bokeh 将图例放在绘图区域外。图例是用于标识图表中各个元素的标签,通常位于绘图区域内部。然而,在某些情况下,我们可能希望将图例放在绘图区域之外,以节省空间或使图表更清晰易读。
阅读更多:Bokeh 教程
使用 Bokeh 将图例放在绘图区域外
Bokeh 是一个强大的 Python 数据可视化工具,可以帮助我们创建各种交互式图表和可视化效果。通过 Bokeh,我们可以轻松地控制图例的位置,并将其放在绘图区域外。
首先,让我们导入必要的库并创建一个简单的示例图表:
from bokeh.plotting import figure, show
from bokeh.models import Legend, LegendItem
# 创建一个绘图对象
p = figure(width=400, height=400)
# 添加一些数据点
x = [1, 2, 3, 4, 5]
y1 = [1, 2, 3, 4, 5]
y2 = [5, 4, 3, 2, 1]
p.line(x, y1, legend_label="Line 1")
p.line(x, y2, legend_label="Line 2")
# 显示图表
show(p)
这段代码创建了一个绘图对象 p
,并向其中添加了两条线,分别对应数据集 y1
和 y2
。我们使用 legend_label
参数为每条线添加了一个标签,分别是 “Line 1” 和 “Line 2″。
默认情况下,图例将位于绘图区域的右上角。现在,我们将介绍几种方法来将图例放在绘图区域之外。
方法一:在绘图区域外添加图例
我们可以在绘图区域外部创建一个新的 Bokeh 组件来作为图例,并将其与绘图对象进行关联。接下来,我们将使用 legend
函数创建图例组件,并使用 plot
属性将其与绘图对象关联。代码示例如下:
# 创建一个新的图例组件
legend = Legend(items=[LegendItem(label="Line 1", renderers=[line1_renderers]),
LegendItem(label="Line 2", renderers=[line2_renderers])],
location="center")
# 将图例组件与绘图对象关联
p.add_layout(legend, "right")
在上面的代码中,我们首先创建了一个新的图例组件 legend
,并使用 items
参数为其添加了两个图例项。每个图例项都包含一个标签和对应的渲染器,用于确定图例项所代表的元素。
接下来,我们使用 location
参数将图例放在绘图区域的右侧("right"
)。最后,我们使用 add_layout
方法将图例组件与绘图对象 p
关联起来。
方法二:在绘图区域内添加可交互的图例
除了将图例放在绘图区域之外,我们还可以在绘图区域内部添加一个可交互的图例,以便用户可以自由选择显示或隐藏各个元素。
Bokeh 提供了 CheckboxGroup
组件,可以帮助我们实现这一功能。代码示例如下:
from bokeh.models import CheckboxGroup
# 创建一个 CheckboxGroup 组件
checkbox_group = CheckboxGroup(labels=["Line 1", "Line 2"],
active=[0, 1])
# 定义一个 JavaScript 回调函数
callback_code = """
var selected = cb_obj.active;
plot.renderers[1].visible = (selected.includes(0));
plot.renderers[2].visible = (selected.includes(1));
"""
# 将回调函数与 CheckboxGroup 组件关联
checkbox_group.js_on_change('active', CustomJS(args=dict(plot=p), code=callback_code))
p.add_layout(checkbox_group)
在上面的代码中,我们首先创建了一个 CheckboxGroup
组件,并使用 labels
参数为其添加了两个选项。通过将 active
参数设置为 [0, 1]
,我们默认选择了这两个选项。
接下来,我们定义了一个 JavaScript 回调函数,用于根据选项的选择状态来显示或隐藏对应的元素。回调函数中的 cb_obj.active
表示当前被选中的选项索引。我们通过设置 plot.renderers[1].visible
和 plot.renderers[2].visible
属性来控制渲染器的可见性。
最后,我们使用 js_on_change
方法将回调函数与 CheckboxGroup
组件关联,并使用 add_layout
方法将组件添加到绘图对象 p
上。
总结
在本文中,我们介绍了如何使用 Bokeh 将图例放在绘图区域之外。我们可以通过在绘图区域外部创建一个新的图例组件,或者在绘图区域内部添加一个可交互的图例,来达到这一目的。这些方法可以帮助我们更好地呈现图表,提高数据可视化的效果和清晰度。
在实际应用中,根据具体的需求,我们可以选择适合的方法来控制图例的位置和样式,以满足用户和业务的要求。希望本文对您在使用 Bokeh 绘制图表并控制图例位置时有所帮助。