我有一个Dygraph.js,它有一个移动的图例,“快照”到最近的点。不管怎样,这就是我们想要的行为。
如果使用无值传递数据(如下所示),则会得到所需的行为。突出显示回调(我认为)会使图例快速显示位于(time_1,1.5)或(time_4,1.6)的值,但忽略time_2和time_3:
time_1,1.5
time_2,
time_3,
time_4,1.6
但是,如果我有这样的数据(带有NaN值),那么图例实际上就会切换到time_2和time_3中不存在的点,并且在拥挤的数据集中很难突出显示点:
time_1,1.5
time_2,NaN
time_3,NaN
time_4,1.6
问题是,我需要支持no值和NaN值,以便控制如何使用connectSeparatedPoints
连接数据点。我希望完全禁用所有点的图例抢注/突出显示行为,除非它们具有显式的、真实的非NaN值。
highlightCallback
/ unhighlightCallback
是实现这一目标的正确方法,还是其他的实现方式?
发布于 2016-12-11 09:35:32
禁用图例的一种方法是在第一个系列格式化程序中抛出一个异常。当第二个系列的值为NaN时,抛出一个异常将避免图例对此类点的抢占。
这可以使用第一个系列格式化程序来完成:
function(val, opts, seriesName, dygraph, row, col) {
// raise an exception if the second series value is NaN
if (isNaN(dygraph.getValue(row, 1))) {
throw "disable legend for NaN"
}
return val;
}
此代码段展示了一个使用此格式化程序的简短示例:
var data = "x,y\n"
+"0,1.5\n"
+"1,1.5\n"
+"2,NaN\n"
+"3,NaN\n"
+"4,1.6\n"
+"5,1.1\n";
new Dygraph(document.getElementById("graph"), data, {height:200,
axes: {
x: {
valueFormatter: function(val, opts, seriesName, dygraph, row, col) {
if (isNaN(dygraph.getValue(row, 1))) {
throw "disable legend for NaN"
}
return val;
}
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/dygraph/1.1.1/dygraph-combined.js"></script>
<div id="graph" />
https://stackoverflow.com/questions/25478238
复制