Python Bokeh在图例中定义预选的;隐藏&x27;或';静音';

Python Bokeh在图例中定义预选的;隐藏&x27;或';静音';,python,bokeh,Python,Bokeh,在 默认情况下显示所有行。创建图形时,是否有方法隐藏除“IBM”之外的所有行?解决状态“隐藏”或“未隐藏”的标志是什么?您可以使用渲染器.visible=False隐藏一些图示符 import pandas as pd from bokeh.palettes import Spectral4 from bokeh.plotting import figure, show from bokeh.sampledata.stocks import AAPL, IBM, MSFT, GOOG p =


默认情况下显示所有行。创建图形时,是否有方法隐藏除“IBM”之外的所有行?解决状态“隐藏”或“未隐藏”的标志是什么?

您可以使用
渲染器.visible=False
隐藏一些图示符

import pandas as pd
from bokeh.palettes import Spectral4
from bokeh.plotting import figure, show
from bokeh.sampledata.stocks import AAPL, IBM, MSFT, GOOG

p = figure(plot_width = 800, plot_height = 250, x_axis_type = "datetime", title = 'Glyphs hidden by default')

lines = {}
for data, name, color in zip([AAPL, IBM, MSFT, GOOG], ["AAPL", "IBM", "MSFT", "GOOG"], Spectral4):
    df = pd.DataFrame(data)
    df['date'] = pd.to_datetime(df['date'])
    lines[name] = p.line(df['date'], df['close'], line_width = 2, color = color, alpha = 0.8, legend = name)
    lines[name].visible = True if name == "IBM" else False

p.legend.location = "top_left"
p.legend.click_policy = "hide"

show(p)

以下是使用复选框的示例…(为了好玩):


太好了,谢谢!它在一开始对我不起作用,因为我使用了click_policy=mute。这里使用的渲染器是“静音”的,只是为了完整性。你可以使用“mute”,但是你需要在p.line()中指定一个参数,比如“mute_alpha=0.35”。我发现了这个方法在“mute”情况下的一个bug。如果
单击\u policy='mute'
,则使用
行[name].visible=False将使该行消失。我使用了
行[name].mute=True
,结果就是我想要的。
import pandas as pd
from bokeh.palettes import Spectral4
from bokeh.plotting import figure, show
from bokeh.sampledata.stocks import AAPL, IBM, MSFT, GOOG

p = figure(plot_width = 800, plot_height = 250, x_axis_type = "datetime", title = 'Glyphs hidden by default')

lines = {}
for data, name, color in zip([AAPL, IBM, MSFT, GOOG], ["AAPL", "IBM", "MSFT", "GOOG"], Spectral4):
    df = pd.DataFrame(data)
    df['date'] = pd.to_datetime(df['date'])
    lines[name] = p.line(df['date'], df['close'], line_width = 2, color = color, alpha = 0.8, legend = name)
    lines[name].visible = True if name == "IBM" else False

p.legend.location = "top_left"
p.legend.click_policy = "hide"

show(p)
import pandas as pd

from bokeh.palettes import Spectral4
from bokeh.plotting import figure, output_file, show
from bokeh.sampledata.stocks import AAPL, IBM, MSFT, GOOG
from bokeh.models import CheckboxGroup, CustomJS
from bokeh.layouts import row

code = """
    if (0 in checkbox.active) {
        l0.visible = true
    } else {
        l0.visible = false
    }
    if (1 in checkbox.active) {
        l1.visible = true
    } else {
        l1.visible = false
    }
    if (2 in checkbox.active) {
        l2.visible = true
    } else {
        l2.visible = false
    }
    if (3 in checkbox.active) {
        l3.visible = true
    } else {
        l3.visible = false
    }        
"""

p = figure(plot_width=800, plot_height=250, x_axis_type="datetime")
p.title.text = 'Click on legend entries to hide the corresponding lines'

l=[]
for data, name, color in zip([AAPL, IBM, MSFT, GOOG], ["AAPL", "IBM", "MSFT", "GOOG"], Spectral4 ):
    df = pd.DataFrame(data)
    df['date'] = pd.to_datetime(df['date'])
    l.append( p.line(df['date'], df['close'], line_width=2, color=color, alpha=0.8, legend=name))


p.legend.location = "top_left"
p.legend.click_policy = "hide"

output_file("interactive_legend.html", title="interactive_legend.py example")

callback = CustomJS(code=code, args={})
checkbox = CheckboxGroup(labels=["AAPL", "IBM", "MSFT", "GOOG"], active=[0, 1, 2, 3], callback=callback, width=100)
callback.args = dict(l0=l[0], l1=l[1], l2=l[2], l3=l[3],  checkbox=checkbox)

layout = row(checkbox, p)
show(layout)