散景如何为 multi_line 方法创建的图形添加图例?

Bokeh how to add legend to figure created by multi_line method?

我正在尝试为图形添加图例,其中包含由 multi_line 方法创建的两行。 示例:

p = figure(plot_width=300, plot_height=300)
p.multi_line(xs=[[4, 2, 5], [1, 3, 4]], ys=[[6, 5, 2], [6, 5, 7]], color=['blue','yellow'], legend="first")

在这种情况下,图例仅适用于第一行。将图例定义为列表时出现错误:

p.multi_line(xs=[[4, 2, 5], [1, 3, 4]], ys=[[6, 5, 2], [6, 5, 7]], color=['blue','yellow'], legend=["first","second"])

是否可以为多行添加图例?

维护者说明PR #8218 将合并到 Bokeh 1.0,允许直接为多行和补丁创建图例,无需任何循环或使用单独的 line来电。


multi_line 适用于概念上单一的事物,恰好有多个子组件。想一想德克萨斯州,这是合乎逻辑的事情,但它有几个不同的(且不相交的)多边形。您可能会使用 Patches 为 "Texas" 绘制所有多边形,但总体上您只需要一个图例。传说标记合乎逻辑的事物。如果你想将几行标记为逻辑上不同的东西,你将不得不用 p.line(..., legend_label="...")

单独绘制它们

维护者说明PR #8218 将合并到 Bokeh 1.0,允许直接为多行和补丁创建图例,无需任何循环。


为了让它更快,当你有很多数据或大 table 等时,你可以做一个 for 循环:

1) 列出颜色和图例

您可以随时为您的颜色导入散景调色板
从 bokeh.palettes 导入“你的调色板”
检查此 link:bokeh.palets

colors_list = ['blue', 'yellow']
legends_list = ['first', 'second']
xs=[[4, 2, 5], [1, 3, 4]]
ys=[[6, 5, 2], [6, 5, 7]]

2) 你的身材

p = figure(plot_width=300, plot_height=300)

3) 通过上面的列表进行 for 循环并显示

for (colr, leg, x, y ) in zip(colors_list, legends_list, xs, ys):
    my_plot = p.line(x, y, color= colr, legend= leg)
    
show(p)

在最近的版本中(我认为是从 0.12.15 开始),可以将图例添加到 multi_line 图中。您只需向数据源添加一个 'legend' 条目。以下是取自 Google 群组讨论论坛的示例:

data = {'xs': [np.arange(5) * 1, np.arange(5) * 2],
        'ys': [np.ones(5) * 3, np.ones(5) * 4],
        'labels': ['one', 'two']}

source = ColumnDataSource(data)

p = figure(width=600, height=300)
p.multi_line(xs='xs', ys='ys', legend='labels', source=source)