下面的代码用于使用滑块更改Plotly热图的色标的“min”。
但它很慢:我们有一个1 fps的移动时,拖动滑块。
像用“heatmapgl”代替“heatmap”这样的解决方案并不能真正解决这个问题(它可能会提高到2 fps)。
如何使用滑块更快地更改色标?
对于许多应用程序来说,能够“实时”(超过10 fps)看到色标变化的结果是至关重要的,可以使用Matplotlib等来实现这一点。
如何在Plotly JS中获得相同的行为?
var z = Array.from({length: 500}, () => Array.from({length: 1000}, () => Math.floor(Math.random() * 500)));
var steps = [], i;
for (i = 0; i < 500; i++)
steps.push({label: i, method: 'restyle', args: ['zmin', i]});
Plotly.newPlot('myDiv', [{z: z, colorscale: 'Jet', type: 'heatmap'}], {sliders: [{steps: steps}]});
<script src="https://cdn.plot.ly/plotly-2.16.2.min.js"></script>
<div id="myDiv"></div>
4条答案
按热度按时间fxnxkyjh1#
完全归功于EricLavault的伟大发现和his answer,这给出了一个很好的解决方案,直到Plotly。JS热图代码得到改进。
下面是一个解决bug的方法,供将来参考:使用HTML原生滑块(
<input type="range">
)代替Plotly滑块。对我来说,它给出了另一个改善的数量帧每秒从他的答案由一个因素至少2。qeeaahzv2#
热图需要为每个滑块步骤完全重新绘制,这特别需要时间,因为点的数量(500k)。
然而,如评论中所讨论的,似乎没有平滑算法(
zsmooth:false
)时比有平滑算法(zsmooth:'best'
或zsmooth:'fast'
)时花费的时间更长,这是不符合逻辑的:由于插值成本,则应该相反。通过查看代码,我可以确认存在可以解决的性能问题。在PR修复问题之前,您可以使用一个解决方案,其中包括设置:
zsmooth:'fast'
,以便受益于(当前)最快的绘图方法。image-rendering: pixelated
以防止浏览器执行平滑。当然,因为这太容易了,你会遇到一个bug,那就是在使用
zsmooth:'fast'
时,高分辨率的热图会被“截断”(这个问题在版本2中已经修复了)。为了避免这个问题,我们需要在布局中设置明确的宽度,高度和边距。注意:关于图大小,如果您想给予用户一个机会正确地看到热图,则设置明确的宽度、高度和边距可能是必要的。显然,除非定义了特定(缩放)范围,否则每个块至少一个像素,并且对于滑块,每个步长也是一个像素(最后,分辨率本身可能是一个问题)。
jxct1oxe3#
我的建议,以提高响应的色标滑块在一个Plotly。js热图:
对于滑块步骤,将“restyle”替换为“animate”方法。创建自定义帧阵列来存储滑块帧。将持续时间和过渡时间设置为0以进行即时更新。使用单独的函数根据滑块值更新色标。
wgmfuz8q4#