散景:如何隐藏属于同一组/类别的线条的图例

Joh*_*ohn 5 legend pandas bokeh jupyter

场景如下:我有一组具有 2 个属性的数据:年份和 (export/import) 年份有 3 个选择, (export/import) 有 2 个选择,总共有 3*2=6 个数据集。

 1. 2015, imports 
 2. 2016, imports
 3. 2017, imports
 4. 2015, exports
 5. 2016, exports
 6. 2017, exports 
Run Code Online (Sandbox Code Playgroud)

我以前的做法是为每个数据集添加一个图例,这样总共有 6 个图例。当我点击一个图例时,例如 2015 导出,只有 1 行被隐藏。其他带有关键字 2015 或“exports”的行仍然可见。我想知道是否有一种可行的方法可以只生成 2+3=5 个图例,2015,2016,2017,exports 和 imports。当我点击 2015 时,属于 2015 的所有 3 个数据集都被隐藏了。然后,如果我进一步单击“导入”,则所有属于“导入”的数据集都将被隐藏。此时,只有 2 个数据集可见:

 1. 2016, exports
 2. 2016, imports
Run Code Online (Sandbox Code Playgroud)

(推理是 1。它线性增长 2。它为数据集提供了另一个视角)

我有一个当前情况的工作示例,其中包含 6 个图例:

from bokeh.io import output_file, show, output_notebook, reset_output
from bokeh.models import ColumnDataSource
from bokeh.palettes import GnBu3, OrRd3
from bokeh.plotting import figure

output_file("stacked_split.html")

fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
years = ["2015", "2016", "2017"]

exports = {'fruits' : fruits,
           '2015'   : [2, 1, 4, 3, 2, 4],
           '2016'   : [5, 3, 4, 2, 4, 6],
           '2017'   : [3, 2, 4, 4, 5, 3]}
imports = {'fruits' : fruits,
           '2015'   : [-1, 0, -1, -3, -2, -1],
           '2016'   : [-2, -1, -3, -1, -2, -2],
           '2017'   : [-1, -2, -1, 0, -2, -2]}

p = figure(y_range=fruits, plot_height=250, x_range=(-16, 16), title="Fruit import/export, by year",
           toolbar_location=None)

p.hbar_stack(years, y='fruits', height=0.9, color=GnBu3, source=ColumnDataSource(exports),
             legend=["%s exports" % x for x in years])

p.hbar_stack(years, y='fruits', height=0.9, color=OrRd3, source=ColumnDataSource(imports),
             legend=["%s imports" % x for x in years])

p.y_range.range_padding = 0.1
p.ygrid.grid_line_color = None
p.legend.location = "top_left"
p.axis.minor_tick_line_color = None
p.outline_line_color = None
p.legend.click_policy = 'hide'
reset_output()
output_notebook()
show(p)
Run Code Online (Sandbox Code Playgroud)

强文本