📅  最后修改于: 2023-12-03 15:18:53.930000             🧑  作者: Mango
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,您可以轻松地创建漂亮的可交互数据可视化,帮助您更加深入地了解数据。