Plotly Python 多时间帧多光谱轨迹的滑块高效更新方案咨询
Plotly Python 多时间帧多光谱轨迹的滑块高效更新方案咨询
我目前在用Plotly Python处理多时间帧的光谱数据可视化需求。我有一个包含二维数组的列表,每个数组对应一个时间帧,里面存储了若干个光源的光谱数据——数组形状是n*m,其中n是光源数量,m是单条光谱的长度。
这里我用随机数生成了一个模拟数据集,方便复现场景:
# 包含1000个时间帧的列表,每个时间帧对应20条光源光谱 a = [np.random.rand(20, 5120) for i in range(1000)]
目前我只能实现单个时间帧的可视化:给当前时间帧里的每个光源各添加一条轨迹到图中。现在我想做一个交互式滑块,不用每次重新生成绘图窗口、修改帧索引再绘图,就能快速切换不同时间帧查看数据。
我之前在相关讨论里找到一个中间方案,但这类方案本质上是控制轨迹的可见性——也就是先把所有时间帧的所有轨迹一次性全部绘制出来,然后通过滑块切换哪些轨迹显示、哪些隐藏。但我的数据规模实在太大了:1000个时间帧×20条光谱,这种方式性能极差,完全跑不动。
有没有更高效的实现方式呢?
下面是我当前单时间帧可视化的效果,以及用上述可见性切换方案实现的少量时间帧滑块切换效果(但大规模数据下完全不可行)。
你可以用下面的代码复现这个滑块切换的效果(用模拟数据):
# 包含1000个时间帧的列表,每个时间帧对应20条光源光谱 a = [np.random.rand(20, 5120) for i in range(1000)] # 创建图形对象 fig = go.Figure() # 为每个滑块步骤添加所有轨迹 for i in np.arange(len(a)): for k in range(0, a[i].shape[0]): fig.add_trace(go.Scatter(mode="lines", x=frequencies, y=a[i][k, :], name=f"Source {k}")) # 创建滑块步骤 steps = [] for i in range(len(a)): step = dict( method="restyle", args=["visible", [False] * a[i].shape[0]*len(a)], ) # 将当前时间帧对应的所有轨迹设为可见 step["args"][1][(i*a[i].shape[0]):(i*a[i].shape[0]+a[i].shape[0])] = [True]*a[i].shape[0] steps.append(step) sliders = [dict( active=1, currentvalue={"prefix": "Sequence: "}, pad={"t": 50}, steps=steps )] fig.update_layout(sliders=sliders) # 修改滑块步骤的标签 for i in range(len(a)): fig['layout']['sliders'][0]['steps'][i]['label'] = i fig.show()
提前感谢各位的帮助!另外如果有其他Python可视化库能实现这个需求,也欢迎推荐~
备注:内容来源于stack exchange,提问作者Antoine101
相关产品推荐
相关产品推荐

