javascript - Plotly.js - 热图动画非常闪烁
问题描述
我正在尝试使用 Plotly.js 为热图制作动画。
到目前为止,我得到了:
var rho = [];
for (var n = 0; n < 100; n++) {
rho[n] = [];
for (var l = 0; l < 100; l++) {
rho[n][l] = n * l;
}
}
var dummy = 1;
var data = [{
z: rho,
type: 'heatmap'
}];
function compute() {
dummy++;
for (n = 0; n < 100; n++) {
for (l = 0; l < 100; l++) {
data[0].z[n][l] = Math.sin(0.3 * (n * l - 0.05) + dummy);
}
}
}
Plotly.newPlot('graph', data);
function update() {
compute();
rho = data[0].z;
Plotly.animate('graph', {
data: [{
z: rho,
type: 'heatmap'
}]
}, {
transition: {
duration: 100
},
frame: {
duration: 100,
redraw: true
}
})
requestAnimationFrame(update);
}
requestAnimationFrame(update);
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<div id="graph" style="position: relative; width: 600px; height: 500px;"></div>
但是,由于闪烁,此代码不会产生流畅的动画。
如果我将过渡或动画的持续时间设置为 0(如此处所示),它甚至不会显示热图。
为什么会这样?
如何修复闪烁并获得流畅的动画(使用双缓冲或类似的东西)?
解决方案
使用Plotly.redraw
或Plotly.restyle
来防止清除框架。
var rho = [];
for (var n = 0; n < 100; n++) {
rho[n] = [];
for (var l = 0; l < 100; l++) {
rho[n][l] = n * l;
}
}
var dummy = 1;
var data = [{
z: rho,
type: 'heatmap'
}];
function compute() {
dummy++;
for (n = 0; n < 100; n++) {
for (l = 0; l < 100; l++) {
data[0].z[n][l] = Math.sin(0.3 * (n * l - 0.05) + dummy);
}
}
}
Plotly.newPlot('graph', data);
function update() {
compute();
rho = data[0].z;
let myDiv = document.getElementById("graph");
myDiv.data.z = rho
Plotly.redraw(myDiv);
// Plotly.restyle(myDiv, 'z', [rho]);
}
setInterval(function () {
update()
}, 200.0);
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<div id="graph" style="position: relative; width: 600px; height: 500px;"></div>
推荐阅读
- python - 将 MySQL 套接字与 Orange3 一起使用
- html - Vuetify 嵌套数据表列的宽度问题
- node.js - 使用 opentype.js 创建字体子集得到“OTS 解析错误:cmap:解析表失败”错误
- javascript - KonvaJS:分离后如何保持形状在组中的位置和旋转?
- spring-integration - if...else 和 spring 集成中的循环
- php - 用于通过网站从包含服务器上指定文件夹中的文件的列表页面下载文件的 PHP 脚本
- apache-spark - 更新 Pyspark Dataframe 中的多个列
- iis - 八达通如何检查IIS是否重置
- linkage - GnuCobol 相当于 NOSSRANGE
- javascript - JavaScript 中的二进制转字符串