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

如何让Plotly X轴刻度默认显示周一且保留缩放细节

解决Plotly热力图X轴默认显示周一刻度且支持缩放后显示细粒度时间的问题

问题核心

直接全局设置tick0和dtick=604800000(一周毫秒数)虽能让默认视图只显示周一刻度,但会强制所有缩放层级都使用周间隔,导致无法查看天、小时等细粒度时间刻度。需要让刻度规则随视图范围动态调整:默认全范围(120天)显示周一,缩放后自动切换到对应粒度的刻度。

解决方案

利用Plotly的tickformatstops特性,针对不同时间范围分别配置刻度规则:在覆盖4个月的区间内指定周间隔和周一起始,更小范围则自动使用Plotly默认的动态刻度逻辑。

修改后的代码

import plotly.graph_objects as go
import datetime
import numpy as np
np.random.seed(1)

programmers = ['Alex','Nicole','Sara','Etienne','Chelsea','Jody','Marianne']

base = datetime.datetime.today()
dates = base - np.arange(120) * datetime.timedelta(days=1)
z = np.random.poisson(size=(len(programmers), len(dates)))

# 计算初始日期范围中的第一个周一作为tick0
first_date = dates[-1]  # 最早的日期
days_to_monday = (0 - first_date.weekday()) % 7  # 0代表周一
first_monday = first_date + datetime.timedelta(days=days_to_monday)

fig = go.Figure(data=go.Heatmap(
        z=z,
        x=dates,
        y=programmers,
        colorscale='Viridis'))

fig.update_layout(
    title='GitHub commits per day',
    xaxis_nticks=36)

fig.update_xaxes(showgrid=True, gridwidth=2, gridcolor='white', type='date',
    rangeslider_visible=False, ticks='outside', tickson='boundaries', ticklen=20,
    tickformatstops = [
        dict(dtickrange=[None, 1000], value="%H:%M:%S.%L\n%b %e %Y"),
        dict(dtickrange=[1000, 60000], value="%H:%M:%S\n%b %e %Y"),
        dict(dtickrange=[60000, 3600000], value="%H:%M\n%b %e %Y"),
        dict(dtickrange=[3600000, 86400000], value="%b %e (%a)\n%Y"),
        # 针对7天到6个月的范围,设置周一为起始、周间隔
        dict(dtickrange=[86400000, "M6"], 
             value="%b %e (%a)\n%Y",
             dtick=604800000,
             tick0=first_monday.strftime('%Y-%m-%d')),
        dict(dtickrange=["M6", "M12"], value="%B\n%Y"),
        dict(dtickrange=["M12", None], value="%Y")]
    )

fig.show()

关键说明

  1. 动态刻度规则:在tickformatstops的dtickrange=[86400000, "M6"]区间(覆盖1天到6个月)中,指定dtick=604800000(一周)和tick0为初始范围的第一个周一,确保默认120天视图只显示周一刻度。
  2. 缩放自适应:当视图缩放至小于7天的范围时,自动匹配前面的dtickrange规则,显示小时、分钟等细粒度刻度,无需额外配置。
  3. 自动计算周一起始:通过日期计算动态获取初始范围的第一个周一,避免硬编码日期,适配任意起始时间的数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:30:46