Plotly:重新标记滑块上的动画刻度线

fis*_*acp 4 python plotly

我正在使用滑块来显示热图动画,并希望重新标记滑块上出现的刻度线。

我的动画中有 50 帧,热图中的每个矩阵的尺寸为 7×7,其中七行/列对应于列表,labels=['A','B','C','D '、'D'、'F'、'G']。此外,在我的应用程序中,每个帧对应于 5 秒的窗口,因此,例如,第 3 帧对应于 15 秒。这是到目前为止我的简单示例,我模仿https://plotly.com/python/sliders/上的文档

import numpy as np
import plotly.graph_objs as go

N = 50
M = np.random.random((N, 7, 7))
labels=['A','B','C','D','D','F','G']
window_length=5

fig = go.Figure()

for step in range(N):
      fig.add_trace(
            go.Heatmap(x=labels,y=labels,z=M[step]))

fig.data[1].visible = True


# Create and add slider
steps = []
for i in range(len(fig.data)):
    step = dict(
        method="update",
        args=[{"visible": [False] * len(fig.data)},
        {"title": "Time: " + str(window_length*i)+' sec'}],)
    step["args"][0]["visible"][i] = True  # Toggle i'th trace to "visible"
    steps.append(step)


sliders = [dict(
    active=0,
    currentvalue={"prefix": "Time "},
    pad={"t": 5},
    steps=steps
)]


fig.update_layout(
    sliders=sliders)

fig.show()
Run Code Online (Sandbox Code Playgroud)

这工作正常,我得到了我的其中一帧的下图:

在此输入图像描述

我想做两点调整:

  1. 在左下角,将“Time-step 4”替换为相应的秒值,在本例中为“Time-20 秒”。
  2. 将滑块上的刻度重新标记为以秒为单位,例如刻度标记标签“step-3”被替换为“15”

我认为我的问题是我很理解是通过

sliders = [dict(
        active=0,
        currentvalue={"prefix": "Time "},
        pad={"t": 5},
        steps=steps
        )]
Run Code Online (Sandbox Code Playgroud)

Fla*_*ino 5

  • 要在滑块刻度标签上显示秒,您可以label=str(window_length * i)在用于创建滑块步骤的字典中进行设置。

  • 要在滑块上方显示“时间:20 秒”,您可以currentvalue={"prefix": "Time: ", "suffix": " seconds"}在用于创建滑块本身的字典中进行设置。

import numpy as np
import plotly.graph_objs as go

N = 50
M = np.random.random((N, 7, 7))
labels = ["A", "B", "C", "D", "D", "F", "G"]
window_length = 5

fig = go.Figure()

for step in range(N):
      fig.add_trace(go.Heatmap(x=labels,y=labels,z=M[step]))

fig.data[1].visible = True

steps = []
for i in range(len(fig.data)):
    step = dict(
        method="update",
        args=[{"visible": [False] * len(fig.data)},
        {"title": "Time: " + str(window_length * i)+" seconds"},],
    label=str(window_length * i))
    step["args"][0]["visible"][i] = True
    steps.append(step)

sliders = [dict(
    active=0,
    currentvalue={"prefix": "Time: ", "suffix": " seconds"},
    pad={"t": 5},
    steps=steps
)]

fig.update_layout(sliders=sliders)

fig.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述