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

Plotly时间差轴显示2T等标识问题及格式化方法咨询

问题与解答

问题描述

我遇到的问题和某Stack Overflow问题类似。我有一个DataFrame,包含diff和date列,数据类型如下:

delta_df['diff'].dtype
>>> dtype('<m8[ns]')
delta_df['date'].dtype
>>> datetime64[ns, UTC]

二者在某种程度上等价,但用Plotly绘制直方图和散点图时,diff轴出现了奇怪的单位,比如2T、2.5T、3T等。而diff列的数据显示为0 days 00:29:36.000001,date列数据为2018-06-11 01:04:25.000005+00:00,我无法理解这种现象。
注:diff列是通过df['date'].diff()生成的。

我的问题:

  1. 这里的T是什么?是Plotly选定的标准单位(比如代表30分钟,2T即1小时)吗?如果是,怎么查看T对应的具体值?
  2. 更重要的是,怎么让轴显示和列中一致的格式,方便阅读?

解答

1. 关于单位"T"

Plotly里的T是**分钟(minute)**的缩写,属于ISO 8601时间格式的标准符号,比如2T就是2分钟,2.5T就是2分30秒,并不是你猜测的30分钟。常见的时间单位缩写还有:

  • s:秒
  • H:小时
  • D:天
  • W:周

2. 设置轴显示匹配DataFrame的格式

要让diff轴显示和DataFrame里一致的0 days HH:MM:SS.ffffff格式,有两种可行方案:

方案一:转换为毫秒数后自定义格式化

先把diff列转换为总毫秒数,再通过自定义函数把刻度值转回timedelta格式:

import plotly.express as px
import pandas as pd

# 将diff转换为总毫秒数
delta_df['diff_ms'] = delta_df['diff'].dt.total_seconds() * 1000

# 绘制图表
fig = px.scatter(delta_df, x='date', y='diff_ms')

# 定义格式化函数
def format_tick(ms):
    return str(pd.to_timedelta(ms, unit='ms'))

# 更新y轴刻度文本
fig.update_yaxes(
    ticktext=[format_tick(tick) for tick in fig.layout.yaxis.tickvals],
    tickvals=fig.layout.yaxis.tickvals
)

fig.show()

方案二:直接使用Plotly时间格式化字符串

Plotly支持直接用格式化字符串指定timedelta的显示格式,尝试以下代码:

import plotly.express as px

fig = px.scatter(delta_df, x='date', y='diff')
# 设置y轴刻度格式为DataFrame中显示的样式
fig.update_yaxes(tickformat="%d days %H:%M:%S.%f")
fig.show()

如果上述格式化不生效,可尝试将diff列转为字符串后绘图(适合数据量不大的场景):

delta_df['diff_str'] = delta_df['diff'].astype(str)
fig = px.scatter(delta_df, x='date', y='diff_str')
fig.show()

内容的提问来源于stack exchange,提问作者J Agustin Barrachina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:20:18