hovertool的基本使用

hovertool

HoverToolBokeh 库中的一个工具,它可以在鼠标悬停在图上时显示数据。当鼠标指针放在图表的特定部分(比如散点图的点或者线图中的线的时候),该工具会显示与该部分相关的附加信息。

一般配套使用的是from bokeh.plotting import figure, show

在Python中,plotting 通常指的是数据可视化,即将数据以图表的形式展现出来。

bokeh.plotting 是 Bokeh 库中的一个模块,它提供了构建复杂统计图像的一种简单且高效的方法。这个模块包含了很多函数,例如 figure(),来创建新的 Figure 对象;show()save(),用于展示和保存图表等。

from bokeh.plotting import figure, show

# 创建一个新图表
p = figure(width=400, height=400)

# 添加一个圆形散点图
p.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size=20, color="navy", alpha=0.5)

# 显示结果
show(p)

image-20230626141130135

现在结合一个python内置的机器学习数据集iris来进行一个描绘。iris 数据集是一个经典的机器学习数据集,它包含了三种鸢尾花(setosa、versicolor和virginica)的四个特征(sepal length、sepal width、petal length 和 petal width)的测量值。这个数据集通常用于分类、数据可视化、数据清洗等机器学习任务的示例。

Bokeh 库提供了一系列内置的样本数据集以便于用户进行数据可视化的实践和学习,iris 就是其中之一。你可以直接使用这些数据集,而无需自己去收集和整理数据。

HoverTool() 函数创建 Hover 工具,用于在鼠标悬停在数据点上时显示数据。然后,我们将HoverTool 对象的tooltips 属性设置为要显示的文本,将HoverTool 对象的renderers 参数设置为将渲染 Hover 工具的scatter 对象。

# 导入需要的模块
from bokeh.plotting import figure, show, output_file
from bokeh.models import HoverTool, ColumnDataSource
from bokeh.sampledata.iris import flowers

# 指定输出html文件名
output_file("iris.html")

# 为不同种类的花设置颜色
color_map = {'setosa': 'red', 'versicolor': 'green', 'virginica': 'blue'}
flowers['color'] = [color_map[x] for x in flowers['species']]

# 创建ColumnDataSource对象,这样我们可以在HoverTool中引用列名
source = ColumnDataSource(flowers)

# 添加工具提示(hover tool)
hover = HoverTool(tooltips=[
    ("Species", "@species"),
    ("Sepal width", "@sepal_width"),
    ("Sepal length", "@sepal_length"),
    ("Petal width", "@petal_width"),
    ("Petal length", "@petal_length"),
])

# 创建一个新的绘图对象,并添加工具提示
p = figure(title = "Iris Morphology", tools=[hover, "pan,wheel_zoom,xbox_select,reset"])

# 绘制散点图
p.circle('petal_length', 'petal_width', source=source,
         color='color', legend_group='species', fill_alpha=0.2, size=10)

# 显示绘图
show(p)

image-20230626143107474

在Bokeh中,@符号用于引用ColumnDataSource对象中的列。

在我们的例子中,"@species"表示从名为"species"的列中获取数据。同样,"@sepal_width""@sepal_length""@petal_width""@petal_length"分别表示引用对应的列。

当您将鼠标悬停在图上的某个点时,HoverTool工具会根据这些引用从数据源中提取对应的值,并在工具提示框中显示出来。

所以,在这里,"@species"等都是指向source(一个ColumnDataSource对象)中对应字段的引用。

在Bokeh中,tools参数用于指定要添加到图形中的工具。这些工具可以帮助用户交互地查看和探索数据。在我们的例子中,tools参数包括以下几项:

  1. hover: 这是一个HoverTool实例,当鼠标悬停在图上的某个点时,它会显示该点的详细信息。在我们的例子中,这些信息包括花的种类(species)和各部分的尺寸(sepal and petal width/length)。
  2. "pan": 这个工具允许用户通过点击并拖动来平移(即改变视角的位置)图形。
  3. "wheel_zoom": 这个工具允许用户通过滚动鼠标滚轮来放大或缩小图形。
  4. "xbox_select": 这个工具允许用户通过拖拽一个矩形框来选择图形中的多个点。选中的点会被高亮显示。
  5. "reset": 这个工具允许用户重置图形的视角和任何高亮的选中状态,恢复到初始状态。

以上这些工具都将被添加到图形的工具栏中,用户可以在图形上方直接看到并使用它们。

Bokeh提供了许多内置的工具以增强图形的交互性。以下是一些常见的可用工具:

  • "box_select": 使用矩形框选中数据点。
  • "xbox_select""ybox_select": 在x轴或y轴方向上使用矩形框选择数据点。
  • "crosshair": 在鼠标悬停位置显示十字线。
  • "lasso_select": 用自由绘制的套索形状选择数据点。
  • "poly_select": 用多边形选取数据点。
  • "tap": 单击选择数据点。
  • "wheel_zoom""xwheel_zoom""ywheel_zoom": 使用鼠标滚轮在所有轴、x轴或y轴方向进行缩放。
  • "box_zoom""xbox_zoom""ybox_zoom": 用拖动的矩形框来定义缩放范围。
  • "undo""redo": 撤销/重做工具栏动作。
  • "reset": 重置视图到初始状态。
  • "save": 保存图像为PNG格式。
  • "zoom_in""zoom_out": 缩放工具,可以针对所有轴、x轴或y轴。

你可以将这些工具名称字符串添加到tools参数列表中,以将它们添加到图形的工具栏。下面是一个例子:

python复制代码p = figure(tools="pan,wheel_zoom,box_select,crosshair,reset")

此外,还可以创建自定义的HoverTool或其他工具实例,并将其添加到工具栏中。例如:

python复制代码hover = HoverTool(tooltips=[("Species", "@species")])
p = figure(tools=[hover, "pan,wheel_zoom,reset"])

在这个例子中,当鼠标悬停在数据点上时,会显示该点的"Species"值。

posted @ 2023-06-26 14:44  ivanlee717  阅读(344)  评论(0编辑  收藏  举报