📜  Python Bokeh - 制作交互式图例(1)

📅  最后修改于: 2023-12-03 15:18:53.930000             🧑  作者: Mango

Python Bokeh - 制作交互式图例

Bokeh 是一种强大的 Python 可视化工具,它的主要优点是可以在 Web 浏览器或 Jupyter Notebook 中创建交互式图形。其中有一个非常有用的功能是 Bokeh 可以帮助我们制作交互式图例。

常见用法

Bokeh 实现制作交互式图例的方法很多,以下是一些常见用法:

鼠标悬浮提示信息

通过 hover ,我们可以在鼠标悬浮时显示提示信息,比如:

from bokeh.models import HoverTool

hover = HoverTool(tooltips=[("x", "$x"), ("y", "$y")])

# ... 省略一些代码 ...

plot.add_tools(hover)

上述代码中,我们创建了一个鼠标提示工具 hover ,并添加了两个提示信息,分别是 x 和 y 轴坐标。然后将工具添加到 plot 组件中,即可在鼠标悬浮时显示提示信息。

标签筛选

我们可以通过配置 Click 事件来启用、禁用特定的数据点。以下是一个基本的示例:

from bokeh.models import CustomJS, CheckboxGroup

checkbox_group = CheckboxGroup(labels=["Series 1", "Series 2", "Series 3"])

callback = CustomJS(code="""
    var indices = cb_obj.active;
    console.log('CheckboxGroup: active=' + indices, ', value=' + cb_obj.value)
    source.selected.indices = []
    for (var i = 0; i < indices.length; i++) {
        source.selected.indices = source.selected.indices.concat(source_indexes[indices[i]])
    }
    source.change.emit()
""")

checkbox_group.js_on_change("active", callback)

上述代码中,我们创建了一个 CheckboxGroup ,其中包含三个选择框。然后,我们定义了一个 callback 函数,当用户更改选择框时,该函数将解除选择所有数据点,并根据选择框的值重新选择相关数据点。

直线动画

使用 Bokeh,我们可以创建漂亮的动画效果,例如下面的代码段演示了如何动态绘制正弦波:

from bokeh.io import curdoc
from bokeh.layouts import column
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import Slider
from bokeh.plotting import figure

source = ColumnDataSource(data=dict(x=[], y=[]))

plot = figure(x_range=[0, 10], y_range=[-1.5, 1.5])
plot.line(x='x', y='y', source=source)

freq_slider = Slider(start=0.1, end=4, value=1, step=.1, title="Frequency")
amp_slider = Slider(start=0.1, end=2, value=1, step=.1, title="Amplitude")

def update(attrname, old, new):
    freq = freq_slider.value
    amp = amp_slider.value
    x = [0.1 * i for i in range(100)]
    y = [amp * np.sin(freq * x_i) for x_i in x]
    source.data = dict(x=x, y=y)

for w in [freq_slider, amp_slider]:
    w.on_change('value', update)

inputs = column(freq_slider, amp_slider)
curdoc().add_root(column(inputs, plot))

上述代码中,通过调节滑块的值,我们可以观察到正弦波的变化。注意,我们定义的 update 函数将在每次滑块值发生变化时调用。

结论

在本文中,我们介绍了 Bokeh 中三种常见的制作交互式图例的方法:鼠标悬浮提示信息、标签筛选和动画效果。通过使用 Bokeh,您可以轻松地创建漂亮的可交互数据可视化,帮助您更加深入地了解数据。