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

Plotly散点图实现时间戳Y轴的对数刻度显示问题

Plotly散点图实现时间戳Y轴的对数刻度显示问题

嗨,我来帮你搞定这个时间戳Y轴加对数刻度的问题~

你遇到的核心问题其实很好理解:Plotly的对数刻度是针对数值型数据设计的,而pd.to_datetime转出来的是日期时间对象,本质是时间点而非数值,所以直接给它加log_y=True会失效,甚至导致数据不显示。

那怎么兼顾对数刻度和时间戳显示呢?我们可以换个思路:用原始秒数维持对数刻度的计算逻辑,把Y轴的刻度标签转换成易读的时间格式,这样既保留了对数刻度的特性,又能显示成你想要的时间持续时长。

下面是具体的实现步骤和代码:

1. 先写一个秒数转时间字符串的工具函数

这个函数可以把秒数转换成类似“X天Y小时”“X小时Y分钟”这种友好的格式,你可以根据自己的需求调整显示细节:

def seconds_to_time_str(seconds):
    days = seconds // (24 * 3600)
    remaining = seconds % (24 * 3600)
    hours = remaining // 3600
    remaining %= 3600
    minutes = remaining // 60
    secs = remaining % 60
    
    if days > 0:
        return f"{days}d {hours}h"
    elif hours > 0:
        return f"{hours}h {minutes}m"
    elif minutes > 0:
        return f"{minutes}m {secs}s"
    else:
        return f"{secs}s"

2. 基于原始秒数绘制对数刻度散点图,再替换Y轴标签

我们依然用原始的秒数数据绘图(这样对数刻度能正常工作),然后把Y轴的刻度值转换成对应的时间字符串:

import pandas as pd
import plotly.express as px

df = pd.DataFrame({
    'Position':(1,2,3,4,5,6,7,8,9),
    'Value':(1,20,821,2300,4500,30000,405600,1023764,11256400),
})

# 用原始秒数绘制散点图,开启对数Y轴
fig = px.scatter(x=df['Position'], y=df['Value'], log_y=True)

# 获取当前Y轴的默认刻度值,转换成时间标签
y_ticks = fig.layout.yaxis.tickvals
y_tick_labels = [seconds_to_time_str(int(tick)) for tick in y_ticks]

# 更新Y轴的显示内容
fig.update_layout(
    yaxis=dict(
        ticktext=y_tick_labels,
        tickvals=y_ticks,
        title='Duration'  # 自定义Y轴标题
    )
)

fig.show()

3. (可选)手动指定刻度范围,更贴合你的需求

如果默认刻度不符合你的预期,你可以手动设置想要的刻度值(比如覆盖0到130天的范围),然后生成对应的标签:

# 手动指定刻度对应的秒数:1秒、1分钟、1小时、1天、10天、130天
custom_tick_vals = [1, 60, 3600, 86400, 86400*10, 86400*130]
custom_tick_labels = [seconds_to_time_str(val) for val in custom_tick_vals]

fig.update_layout(
    yaxis=dict(
        ticktext=custom_tick_labels,
        tickvals=custom_tick_vals,
        title='Duration',
        range=[0, 8]  # log10(11256400)≈7.05,所以范围设到8足够覆盖所有数据
    )
)

fig.show()

这样操作后,你就能得到一个Y轴显示时间持续时长、同时保持对数刻度的散点图啦~

备注:内容来源于stack exchange,提问作者tonydanza123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:39:49