Python Matplotlib实现鼠标悬停显示隐藏注释的完整代码

Mason
Mason
发布时间:2026-10-13 | 6人浏览过
原创

本文介绍如何在Python Matplotlib中实现鼠标滑过显示隐藏内容的功能。通过利用annotate函数创建点与注释对,并注册motion_notify_event事件监听鼠标移动,动态控制注释的可见性。代码示例展示了如何遍历数据点,当鼠标位于点上时显示对应坐标信息,否则隐藏,适用于需要交互式展示详细数据的图表场景。

Matplotlib鼠标悬停显示注释功能实现

在使用Matplotlib进行绘图时,有时需要实现鼠标点击或滑过才显示特定内容的交互效果。这一功能可以通过annotate(s='str' ,xy=(x,y) ,xytext=(l1,l2) ,..)函数实现,其中s代表注释文本内容,xy指定被注释的坐标点,xytext定义注释文字的坐标位置,其他参数可根据实际需求调整。当鼠标滑过指定区域时,将关联的注释设置为可见状态,默认情况下这些注释是隐藏的。以下是一个具体的实现示例。

核心代码实现与逻辑解析


# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
fig = plt.figure()
po_annotation = []
for i in range(0, 10):
  x = i
  y = x**2
  point, = plt.plot(x, y, 'o')
  annotation = plt.annotate(('x='+str(x), 'y='+str(y)), xy=(x+0.1, y+0.1), xycoords='data', xytext=(x+0.7, y+0.7),
                textcoords='data', horizontalalignment="left",
                arrowprops=dict(arrowstyle="simple",connectionstyle="arc3,rad=-0.1"),
                bbox=dict(boxstyle="round", facecolor="w",edgecolor="0.5", alpha=0.9)
                )
  annotation.set_visible(False)
  po_annotation.append([point, annotation])
def on_move(event):
  visibility_changed = False
  for point, annotation in po_annotation:
    should_be_visible = (point.contains(event)[0] == True)
    # print(point.contains(event)[0])
    if should_be_visible != annotation.get_visible():
      visibility_changed = True
      annotation.set_visible(should_be_visible)
  if visibility_changed:
    plt.draw()
on_move_id = fig.canvas.mpl_connect('motion_notify_event', on_move)
plt.show()

实现该功能的主要思路如下:

首先,创建一个包含[点,注释]对的列表,并在初始化时将所有注释设置为不可见状态。

其次,每次检测到鼠标移动时,注册一个名为“on_move”的回调函数。该函数会遍历每个点和对应的注释,判断鼠标当前位置是否位于某个点上。如果鼠标位于该点上,则使关联的注释变为可见;如果鼠标不在任何点上,则将所有注释设置为不可见。

运行上述代码后的效果为:当鼠标滑过图表中的特定点时,可以动态显示其对应的坐标信息。

总结

以上介绍了在Python Matplotlib底图中实现鼠标滑过显示隐藏内容的实例代码,希望能为读者提供帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持!如果您觉得本文对您有帮助,欢迎转载,请注明出处,谢谢!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表