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

在Google Colab中实现mpld3日期时间轴的鼠标悬停坐标显示

解决mpld3日期时间轴鼠标悬停显示坐标的问题

我来帮你搞定这个mpld3搭配日期时间轴时鼠标悬停不显示正确坐标的问题!

问题的核心在于:mpld3默认的MousePosition插件无法自动识别并解析matplotlib日期轴对应的数值(matplotlib会把日期转成浮点数格式存储),所以我们需要自定义一个坐标格式化函数,把x轴的数值转换成可读的日期时间字符串。

下面是修改后的完整代码,直接就能在Google Colab中运行:

!pip install mpld3
!pip install "git+https://github.com/javadba/mpld3@display_fix"
import mpld3
from mpld3 import plugins
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd

# 创建带日期索引的DataFrame
df2 = pd.DataFrame(
    {"a": [pd.datetime(2019,1,12,5,30,1), pd.datetime(2019,1,13,5,30,1), pd.datetime(2019,1,14,5,30,1)], 
     "b": [40, 5, 60]}
)
df2.set_index("a", inplace=True)

# 创建绘图对象
fig, ax = plt.subplots()
ax.plot(df2, "-o", markersize=2)

# 自定义坐标格式化函数
def format_coords(x, y):
    # 将matplotlib的日期数值转换为datetime对象,再格式化为可读字符串
    date_str = mdates.num2date(x).strftime("%Y-%m-%d %H:%M:%S")
    # 返回格式化后的XY坐标字符串
    return f"X: {date_str}, Y: {y:.2f}"

# 连接MousePosition插件,指定自定义的格式化函数
plugins.connect(fig, plugins.MousePosition(fmt=format_coords, fontsize=14))

# 显示交互式图表
mpld3.display()

关键修改点说明:

  • 导入matplotlib.dates模块,用来处理日期数值与datetime对象的转换逻辑
  • 自定义format_coords函数:
    • 用mdates.num2date(x)把mpld3传递的x轴数值(matplotlib内部的日期浮点数)转成Python的datetime对象
    • 通过strftime把datetime对象格式化为易读的日期时间字符串(这里用%Y-%m-%d %H:%M:%S格式,你可以根据需求调整)
    • y轴保留两位小数,也可根据数据类型自定义格式
  • 初始化MousePosition插件时,通过fmt参数传入自定义的格式化函数

这样修改后,鼠标悬停在图表上时,就能正确显示日期时间格式的X坐标和对应的Y坐标了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:59:44