【问题标题】:How do I control the display order of traces in plotly.js?如何控制 plotly.js 中轨迹的显示顺序?
【发布时间】:2016-12-12 00:49:52
【问题描述】:

我显示了大量的跟踪线。通常为 50-200。我正在将历史数据与模拟数据进行比较。我想通过选择不同的颜色来突出显示单个模拟跟踪线。所有这些都可以正常工作。

但是,显示的跟踪线有时会被大量其他线隐藏。除了重绘整个绘图并最后添加该行之外,有没有办法强制将指定的迹线绘制在其他迹线之上?某种 z-index 等效或“放在前面”机制?

【问题讨论】:

  • 不幸的是,据我所知,绘制的 SVG 图像没有 z-index (stackoverflow.com/questions/482115/…)。在没有替代方案的情况下,您最后添加行的方法似乎是最好的。
  • 谢谢。是的,到目前为止,这似乎是唯一可行的方法。关于 SVG 因素的要点。我可能会在 SVG 绘制顺序方面进行更多探索,但我怀疑你是对的。

标签: javascript plotly


【解决方案1】:

也许这对其他 Plotly 用户也有用。 sn-p 使用 Plotly 的 react 函数将跟踪 7 推送到前台。

var foreground = 7; //trace which is pushed to the foreground

//generate some random data
var trace1 = {
  x: [1, 2, 3, 4],
  y: [1, 2, 0.5, 1.5],
  type: 'lines',
  name: 'trace 0',
  line: {
width: 2
  }
};

var data = [trace1];
var i = 0;
var j = 0;
for (i = 1; i < 10; i += 1) {
  var trace = {
x: [],
y: [],
type: 'lines',
name: 'trace ' + i,
'line': {
  'width': 2
}
  };
  for (j = 0; j < trace1.x.length; j += 1) {
trace.x.push(trace1.x[j])
trace.y.push(trace1.y[j] + Math.random())
  }
  data.push(trace);
}

var buttonForeground = document.getElementById("foreground");
var buttonReset = document.getElementById("reset");

var div = document.getElementById('myDiv');
Plotly.newPlot(div, data);

buttonReset.disabled = true;
buttonForeground.onclick = function() {
  var temp = data[foreground];
  data[foreground] = data[data.length - 1];
  data[data.length - 1] = temp;
  data[data.length - 1]['line']['width'] = 5;
  Plotly.react(div, data);

  switchButtons();
};

document.getElementById("reset").onclick = function() {
  var temp = data[data.length - 1];
  data[data.length - 1] = data[foreground];
  data[foreground] = temp;
  data[foreground]['line']['width'] = 2;
  Plotly.react(div, data, {});
  
  switchButtons();
};

function switchButtons() {
  buttonForeground.disabled = !buttonForeground.disabled;
  buttonReset.disabled = !buttonReset.disabled;
}
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<div id="myDiv" style="width: 480px; height: 400px;"></div>
<button type="button" id='foreground'>Foreground</button>
<button type="button" id='reset'>Reset</button>

【讨论】:

  • 有趣的解决方案,但是这改变了图例中的绘图顺序。
  • 点击前台按钮时脚本出错。
  • @Mark:感谢您的关注! Plotly 的功能似乎得到了更新,我修改了答案以使其适用于最新版本。
猜你喜欢
  • 1970-01-01
  • 2022-08-20
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 2015-05-17
  • 2010-10-29
  • 1970-01-01
  • 2020-06-07
相关资源
最近更新 更多