有没有办法在python“Bokeh”情节中以交互方式关闭图例

时间:2018-01-29 22:25:37

标签: python plot legend bokeh

Hide legend in bokeh plot

所以我理解谁会以编程方式关闭Bokeh图中的图例,但我想知道是否有办法以交互方式执行此操作?有时我在情节传奇中有很多项目,而传说占用了大量的空间或房地产。我想知道是否有办法点击图例来隐藏它,或者某种选择?

我知道我可以通过代码影响图例的可见性:

 myPlot.legend.visible = False

但是我可以按照自己的意愿打开和关闭传奇。

3 个答案:

答案 0 :(得分:2)

您可以使用CustomJS,这是一个在DoubleTap事件上切换图例的示例:

import numpy as np
from bokeh.io import show, output_notebook
from bokeh.plotting import figure
from bokeh import events
from bokeh.models import CustomJS, ColumnDataSource

t = np.linspace(0, 4*np.pi, 100)
source = ColumnDataSource(data=dict(x=t, y1=np.sin(t), y2=np.cos(t)))
fig = figure(plot_height=250)
fig.line("x", "y1", source=source, legend="sin", line_color="red")
fig.line("x", "y2", source=source, legend="cos", line_color="green")

def show_hide_legend(legend=fig.legend[0]):
    legend.visible = not legend.visible

fig.js_on_event(events.DoubleTap, CustomJS.from_py_func(show_hide_legend))

show(fig)

答案 1 :(得分:0)

截至Bokeh mean(),没有用于隐藏图例的内置UI机制。您当前最好的赌注可能是添加一个“显示/隐藏图例”按钮,用于切换图例上的0.12.13

答案 2 :(得分:0)

由于CustomJS.from_py_func不再起作用,因此应该可以解决问题

    toggle_legend_js = CustomJS(args=dict(leg=p.legend[0]), code="""
         if (leg.visible) {
             leg.visible = false
             }
         else {
             leg.visible = true
         }
    """)
    

    p.js_on_event(events.DoubleTap, toggle_legend_js)  

其中p是您的figure