如何在 plotly.graph_objects.Heatmap 日期轴上选择刻度频率?

How to chose tick frequency on plotly.graph_objects.Heatmap date axis?

标题确实说明了一切,我有一个数据帧图,其中有一个日期时间索引,每 15 分钟有 1 行,列的字符串列表和单元格中的二进制值:

fig = go.Figure(data=[
            go.Heatmap(x=df.columns,
                       y=df.index,
                       z=df.values,
                       colorscale=[[0, 'rgb(248,105,107)'], [1, 'rgb(99,190,123)']],
                       xgap=1,
                       ygap=1,
                       # yperiod = f'{1000*60*15}', #1000 milliseconds / second, 60 seconds per minute, 15 minutes per row.
                       showscale=False)
            ])
fig['layout']['yaxis']['autorange'] = "reversed" # earliest date on top, latest date down below.

改变 yperiod 的值不会改变周期的数量,它只会移动一点点。文档要求 'M' 在每个 y 轴刻度之间以毫秒为单位。如果我在字符串中使用 M,热图认为我在谈论几个月,并且我得到一个很长的 y 轴。

请帮我让它每行有 1 个刻度,这真的不应该很难,不需要计算任何东西,只需要显示索引。

模拟了一个我认为与您的结构匹配的数据框。包含了四个不同的参数

  1. tick0 设置为索引中的第一次
  2. dtick 计算索引中第一次和第二次之间的毫秒数
  3. reversed 看来您的代码正在尝试执行此操作
  4. tickformat 只需要小时和分钟
import pandas as pd
import numpy as np
import plotly.graph_objects as go

S = 10
df = pd.DataFrame(
    index=pd.date_range("1-nov-2021", periods=S, freq="15min"),
    data=np.random.uniform(1, 100, [S, 5]),
    columns=list("ABCDE"),
)

fig = go.Figure(
    data=[
        go.Heatmap(
            x=df.columns,
            y=df.index,
            z=df.values,
            colorscale=[[0, "rgb(248,105,107)"], [1, "rgb(99,190,123)"]],
            xgap=1,
            ygap=1,
            # yperiod = f'{1000*60*15}', #1000 milliseconds / second, 60 seconds per minute, 15 minutes per row.
            showscale=False,
        )
    ]
)

fig.update_layout(
    yaxis={
        "tick0": df.index.min(),
        "dtick": (df.index[1] - df.index[0]).total_seconds() * 1000,
        "autorange": "reversed",
        "tickformat": "%H:%M",
    }
)