在Plotly.js中动态切换形状的可见性

问题描述

我正在创建一个不错的plotly.js形状数组。我根据形状的类型添加一个自定义数据属性'custType':'1'或'custType':'2'。每个形状类型的数量将不一致,因此我需要能够动态更新可见性。

我尝试了这个...无济于事

var update = [];
for(x=0; x<data.layout.shapes.length; x++){
        if(data.layout.shapes[x].custType == '1'){
                    update.push({'shapes[' + x + '].visible':false})
            }               
}
                
Plotly.relayout('main',update);    

解决方法

update必须是对象而不是数组,例如

{
  "shapes[0].visible": false,"shapes[1].visible": false
}

请参见下面的代码段。

const trace = {
  x: [1,2,3,4],y: [10,15,13,17],type: 'scatter'
};

const data = [trace];

const layout = {
    shapes: [
        {
            type: 'rect',x0: 1,x1: 2,y0: 10,y1: 12,fillcolor: '#d3d3d3',line: {
                width: 0
            }
        },{
            type: 'rect',x0: 3,x1: 4,y0: 12,y1: 14,line: {
                width: 0
            }
        }
    ]
}

Plotly.newPlot('myDiv',data,layout);

function update() {
  const update = {};
  for(let i = 0; i < layout.shapes.length; i++){
    update['shapes[' + i + '].visible'] = false;
  }
  Plotly.relayout('myDiv',update); 
}
<head>
    <!-- Load plotly.js into the DOM -->
    <script src='https://cdn.plot.ly/plotly-latest.min.js'></script>
</head>

<body>
    <div id='myDiv'><!-- Plotly chart will be drawn inside this DIV --></div>
  <button type="button" onClick="update()">Update</button>
</body>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...