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

Matplotlib dates.DateFormatter 强制显示纳秒问题求解

解决Matplotlib DateFormatter显示多余微秒的问题

针对你遇到的问题——既要保留鼠标hover时的精确时间显示(动态定位),又要让X轴刻度只显示到毫秒(去掉末尾三位微秒),可以用以下两种方案:

方案1:自定义日期格式化器

继承Matplotlib的DateFormatter,重写格式化方法,只保留毫秒级别的显示,同时不影响状态栏的精确时间展示:

import matplotlib.dates as md
import matplotlib.pyplot as plt
import pandas as pd

class MillisecondDateFormatter(md.DateFormatter):
    def format(self, dt, pos=None):
        # 先获取完整的时间字符串
        full_time = super().format(dt, pos)
        # 截断末尾三位微秒,只保留毫秒部分
        return full_time[:-3]

# 构造示例数据
df = pd.DataFrame({
    'timestamp': pd.to_datetime([
        '2022-03-13 03:19:59.999070',
        '2022-03-13 03:20:00.004070',
        '2022-03-13 03:20:00.009070',
        '2022-03-13 03:20:00.014070'
    ]),
    'val': ['X1', 'X2', 'X3', 'X4']
})

# 绘图逻辑
ax = plt.gca()
xfmt = MillisecondDateFormatter('%H:%M:%S.%f')
ax.xaxis.set_major_formatter(xfmt)
plt.plot(df.timestamp, df.val, linestyle="-", marker=".")

plt.setp(ax.get_xticklabels(), rotation=40)
plt.show()

方案2:手动修改刻度标签文本

如果不想自定义类,可以在设置完默认格式化器后,直接遍历并修改所有X轴刻度的显示文本:

import matplotlib.dates as md
import matplotlib.pyplot as plt
import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'timestamp': pd.to_datetime([
        '2022-03-13 03:19:59.999070',
        '2022-03-13 03:20:00.004070',
        '2022-03-13 03:20:00.009070',
        '2022-03-13 03:20:00.014070'
    ]),
    'val': ['X1', 'X2', 'X3', 'X4']
})

# 绘图逻辑
ax = plt.gca()
xfmt = md.DateFormatter('%H:%M:%S.%f')
ax.xaxis.set_major_formatter(xfmt)
plt.plot(df.timestamp, df.val, linestyle="-", marker=".")

# 遍历刻度标签,截断微秒部分
for label in ax.get_xticklabels():
    txt = label.get_text()
    if '.' in txt:
        label.set_text(txt[:-3])

plt.setp(ax.get_xticklabels(), rotation=40)
plt.show()

两种方案都能实现需求:X轴刻度只显示到%H:%M:%S.%3f格式(比如03:19:59.999),而鼠标在图表上移动时,底部状态栏依然会显示完整的精确时间戳(包含所有微秒位数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:39:20