我正在使用滑块来显示热图动画,并希望重新标记滑块上出现的刻度线。
我的动画中有 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)
这工作正常,我得到了我的其中一帧的下图:
我想做两点调整:
我认为我的问题是我很理解是通过
sliders = [dict(
active=0,
currentvalue={"prefix": "Time "},
pad={"t": 5},
steps=steps
)]
Run Code Online (Sandbox Code Playgroud)
要在滑块刻度标签上显示秒,您可以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)