You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现独立HTML中matplotlib散点图鼠标悬停显示坐标

实现方案

静态PNG图片无法保留matplotlib运行时的交互能力,mplcursors的悬停逻辑仅在Python进程运行时生效;原生mpld3默认未加载散点悬停插件,因此直接导出的HTML无坐标提示效果,以下两种方案均可生成完全独立、无需Python运行环境的单文件HTML,实现散点悬停显示坐标:


方案1:mpld3 + 内置点提示插件

无需额外安装依赖,在原有mpld3代码基础上追加插件绑定即可:

import matplotlib.pyplot as plt
import mpld3
from mpld3 import plugins

# 原有散点绘制逻辑,注意拿到scatter对象用于绑定插件
fig, ax = plt.subplots()
scatter = df.plot.scatter(x='column1', y='column2', ax=ax)

# 配置悬停提示内容,默认显示x/y坐标,可自定义格式或追加其他字段
point_labels = [f"x: {x_val:.2f}\ny: {y_val:.2f}" 
                for x_val, y_val in zip(df['column1'], df['column2'])]
plugins.connect(fig, plugins.PointLabelTooltip(scatter, labels=point_labels))

# 导出为独立HTML,所有前端依赖内嵌,无外部网络请求
with open('scatter_interactive.html', 'w', encoding='utf-8') as f:
    f.write(mpld3.fig_to_html(fig))

方案2:Plotly 生成交互散点图

交互体验更流畅,默认自带坐标悬停、缩放、截图等功能,代码逻辑更简洁:

import plotly.express as px

# 生成散点图,默认开启悬停坐标显示
fig = px.scatter(df, x='column1', y='column2')

# 导出单文件HTML,所有JS资源内嵌,双击即可直接打开使用
fig.write_html('scatter_interactive.html', include_plotlyjs='inline', full_html=True)

注意:不要使用plt.savefig()导出PNG再嵌入HTML的方案,位图格式无法存储交互逻辑,不可能实现悬停效果。

内容的提问来源于stack exchange,提问作者sara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 09:30:54