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

求助:mpld3保存的HTML折线图在Arch Linux下X轴显示无符号整数

解决mpld3在Arch Linux下X轴时间戳显示为整数的问题

嘿,我之前也碰到过类似的跨平台mpld3日期显示坑,你的情况大概率是matplotlib的日期轴在Linux环境下没被正确配置成mpld3能识别的格式化模式,导致HTML渲染时直接把matplotlib内部存储的时间戳数值(用浮点数表示的纪元天数)当成整数显示了。下面是具体的原因分析和修复方案:

问题根源

matplotlib会把日期转换为从特定纪元开始的浮点数(比如从0001年1月1日起的天数),mpld3需要依赖matplotlib的日期格式化器,才能把这些数值转成可读的日期字符串。Windows上matplotlib的默认配置会自动处理这个转换,但在Arch Linux这类发行版中,可能因为系统locale缺失、matplotlib后端差异,或是mpld3对日期解析的兼容性问题,导致格式化器没被正确应用。

修复步骤

你需要给x轴显式添加日期定位器和格式化器,确保mpld3能抓取到正确的日期字符串。修改后的代码如下:

import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime
import matplotlib.dates as mdates
import mpld3

fig2, ax2 = plt.subplots()
dsize = fig2.get_size_inches()
fig2.set_size_inches((dsize[0]/2)*(1.5), (dsize[1]/2)*(1.25))

data = pd.DataFrame(
    [['2017-12-01 11:55:01',5],['2017-12-01 13:55:03',10],['2017-12-01 16:55:01',3],['2017-12-01 16:55:01',12]],
    columns=['timestamp','count']
)

# 简化datetime转换逻辑,用pandas原生方法更高效
data['timestamp'] = pd.to_datetime(data['timestamp'], format="%Y-%m-%d %H:%M:%S")
data['hourly'] = data['timestamp'].dt.floor('H')

x = data['hourly']
y = data['count']

ax2.minorticks_off()
ax2.tick_params(axis='x', which='major', pad=15)
plt.xticks(rotation=90)

# 关键:添加日期定位器和格式化器,强制指定显示格式
locator = mdates.AutoDateLocator(minticks=3, maxticks=5)  # 自动适配刻度数量
formatter = mdates.DateFormatter("%Y-%m-%d %H:%M")  # 定义日期显示格式
ax2.xaxis.set_major_locator(locator)
ax2.xaxis.set_major_formatter(formatter)

line, = ax2.plot(x, y, color="Red")
ax2.set_xlabel('Date')
ax2.set_ylabel('Count of Anomalies')

mpld3.save_html(fig2, 'test2.html')

额外注意点

  • 我把你的lambda循环换成了pandas原生的日期处理方法,代码更简洁高效。
  • 如果Arch Linux上还是出现异常,可以在代码开头添加以下两行,强制设置正确的locale,避免系统环境导致的日期格式化失败:
    import locale
    locale.setlocale(locale.LC_TIME, 'en_US.UTF-8')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:32:27