Изменить видимость фигуры в Plotly - PullRequest
0 голосов
/ 12 июня 2018

Как я могу изменить видимость фигуры?Допустим, у меня есть 5 фигур на моем графике, и я хотел бы скрыть первую.

var update = {
    'shapes[0]': {
        'visible': false
    }
}
Plotly.relayout(graphElement, update);

Я пробовал это, но он создает новую (невидимую форму) и вместо этого помещает ее в начало фигуробновления.

1 Ответ

0 голосов
/ 12 июня 2018

У вас почти было это, согласно справочнику по функции в Plotly.js Function Reference, свойства объекта должны быть написаны, как показано ниже.

// update only values within nested objects
var update = {
    title: 'some new title', // updates the title
    'xaxis.range': [0, 5],   // updates the xaxis range
    'yaxis.range[1]': 15     // updates the end of the yaxis range
};
Plotly.relayout(graphDiv, update)

Как вы можете видеть, глубины никогда не бываетбольше 1. Таким образом, нам нужно обновить эту конкретную форму следующим образом.

var update = {
    'shapes[1].visible': false
}
Plotly.relayout(div, update);

Здесь мы выбираем первый объект массива shapes, выбираем свойство visible и устанавливаем значение false.

Пожалуйста, ознакомьтесь с приведенным ниже рабочим примером и сообщите, полностью ли решена ваша проблема.

var d3 = Plotly.d3

function normal_array(mean, stddev, size) {
  var arr = new Array(size),
    i;
  // from https://bl.ocks.org/nrabinowitz/2034281
  var generator = (function() {
    return d3.random.normal(mean, stddev);
  }());

  for (i = 0; i < arr.length; i++) {
    arr[i] = generator();
  }
  return arr;
}

var x0 = normal_array(2, 0.45, 300);
var y0 = normal_array(2, 0.45, 300);

var x1 = normal_array(6, 0.4, 200);
var y1 = normal_array(6, 0.4, 200)

var x2 = normal_array(4, 0.3, 200);
var y2 = normal_array(4, 0.3, 200);


var data = [{
  x: x0,
  y: y0,
  mode: 'markers'
}, {
  x: x1,
  y: y1,
  mode: 'markers'
}, {
  x: x2,
  y: y2,
  mode: 'markers'
}, {
  x: x1,
  y: y0,
  mode: 'markers'
}];

var layout = {
  margin: {
    t: 10,
    r: 10,
    b: 20,
    l: 10
  },
  shapes: [{
      type: 'circle',
      xref: 'x',
      yref: 'y',
      x0: d3.min(x0),
      y0: d3.min(y0),
      x1: d3.max(x0),
      y1: d3.max(y0),
      opacity: 0.2,
      fillcolor: 'blue',
      line: {
        color: 'blue'
      }
    },
    {
      type: 'circle',
      xref: 'x',
      yref: 'y',
      x0: d3.min(x1),
      y0: d3.min(y1),
      x1: d3.max(x1),
      y1: d3.max(y1),
      opacity: 0.2,
      fillcolor: 'orange',
      line: {
        color: 'orange'
      }
    },
    {
      type: 'circle',
      xref: 'x',
      yref: 'y',
      x0: d3.min(x2),
      y0: d3.min(y2),
      x1: d3.max(x2),
      y1: d3.max(y2),
      opacity: 0.2,
      fillcolor: 'green',
      line: {
        color: 'green'
      }
    },
    {
      type: 'circle',
      xref: 'x',
      yref: 'y',
      x0: d3.min(x1),
      y0: d3.min(y0),
      x1: d3.max(x1),
      y1: d3.max(y0),
      opacity: 0.2,
      fillcolor: 'red',
      line: {
        color: 'red'
      }
    }
  ],
  height: 400,
  width: 480,
  showlegend: false
}

Plotly.newPlot('myDiv', data, layout);
$('.toggle').on("click", function(e) {
  e.preventDefault();
  var div = document.getElementById('myDiv');
  var update = {
    'shapes[1].visible': false
  }
  Plotly.relayout(div, update);
});
.toggle {
  position: fixed;
  top: 0px;
  left: 0px;
}
<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <!-- Plotly.js -->
  <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head>

<body>

  <div id="myDiv" style="width: 480px; height: 400px;">
    <!-- Plotly chart will be drawn inside this DIV -->
  </div>
  <button class="toggle">Hide First Trace</button>
  <script>
    <!-- JAVASCRIPT CODE GOES HERE -->
  </script>
</body>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...