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

如何将Matplotlib直方图X轴从秒数整数改为MM:SS格式?

解决直方图X轴秒数转MM:SS格式的问题

你的代码里用mdates.DateFormatter出错的原因很直接:这个工具是用来处理日期时间类型数据的,它会把输入的数值当成「从1970年1月1日算起的天数」,而你的X轴是秒数(比如60秒),在它眼里只是0天的极小一部分,所以所有刻度都显示00:00。

正确的做法是用FuncFormatter自定义一个格式化函数,直接把秒数转换成MM:SS格式,具体修改如下:

修改后的完整代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter  # 导入自定义格式器

# 生成模拟数据:0到1800秒的随机响应时间
df = pd.DataFrame(np.random.randint(0, 1800, size=(1000, 1)), columns=['A'])

start_value = 0
end_value = 1800
increment_by_value = 60

# 设置画布
fig = plt.figure(dpi=100, figsize=(8, 6.5))
ax = fig.add_subplot(111)

# 绘制直方图
plt.hist(df.A, 
         bins=np.arange(start_value, end_value, increment_by_value), 
         color='Purple', 
         label='响应时间', 
         edgecolor='Gray', 
         linewidth=1.0)

# 自定义秒数转MM:SS的格式化函数
def seconds_to_mmss(x, pos):
    minutes = int(x // 60)
    seconds = int(x % 60)
    return f"{minutes:02d}:{seconds:02d}"

# 应用自定义格式器
ax.xaxis.set_major_formatter(FuncFormatter(seconds_to_mmss))

# 设置X轴刻度,每60秒一个
plt.xticks(np.arange(start_value, end_value, increment_by_value), rotation='vertical')

# 设置标题和标签
plt.title("心脏骤停响应时间\n(按1分钟间隔统计)")
plt.xlabel("响应时间区间(MM:SS)")
plt.ylabel("呼叫次数")
plt.legend()
plt.show()

关键改动说明

  1. 替换了mdates.DateFormatter,改用FuncFormatter实现自定义格式转换
  2. 新增的seconds_to_mmss函数会把输入的秒数拆解为分钟和秒,并用两位数字格式化(比如60秒转成01:00)
  3. 调整了标题和X轴标签的文字,让表述更贴合MM:SS格式

内容的提问来源于stack exchange,提问作者David Fort Myers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:06:03