使用 NVD3 从轴获取渲染日期范围

Getting rendered date range from axis with NVD3

我正在使用 NVD3 显示多个折线图,并希望能够获取当前显示的 xAxis 的最小值和最大值。在这种情况下,xAxis 显示时间值。

在图表中切换线条的可见性时,通过单击图例标签,日期范围会发生变化。我已经添加了一个事件处理程序来侦听 legendClicks,但我如何获得新呈现的日期范围?

我最终使用自定义函数在单击图例时找到 x 轴的 min/max 值。我将函数包装在 $timeout 内,以便等待摘要周期完成以获得正确的值,即:

legend: { dispatch: { legendClick: function(e) { $timeout(function(){ getMinMax(); }, 0); } } },

getMinMax 函数是一个快速而肮脏的函数,很可能以更优雅的方式完成,但它确实发挥了作用:

var getMinMax = 函数(){ var maxVal, minVal = null;<br> 对于(var i=0;i<$scope.data.length;i++){ // 只考虑显示 如果 (!$scope.data[i].disabled) {<br> var tempMinVal = d3.max($scope.data[i].values, function(d) { return d.x;} ); var tempMaxVal = d3.min($scope.data[i].values, function(d) { return d.x;} ); minVal = (!minVal || tempMinVal < minVal) ?临时最小值:最小值; maxVal = (!maxVal || tempMaxVal > maxVal) ?临时最大值:最大值; } } return [最小值, 最大值]; };

将从以下格式的数据中获取最小值和最大值:

[ { "key": "AA", "values": [ { "x": 1440712800000, "y": "6", "series": 0 }, { "x": 1440712800000, "y": "6", "series": 0 } ] }, { "key": "BB", "values": [ { "x": 1441144800000, "y": "3", "series": 1 }, { "x": 1443045600000, "y": "3", "series": 1 }, { "x": 1453244400000, "y": "3", "series": 1 }, { "x": 1454022000000, "y": "3", "series": 1 } ] }, { "key": "CC", "values": [ { "x": 1442872800000, "y": "5", "series": 2 }, { "x": 1442872800000, "y": "5", "series": 2 } ] }, { "key": "DD", "values": [ { "x": 1443650400000, "y": "1", "series": 3 }, { "x": 1443650400000, "y": "1", "series": 3 } ] }, { "key": "EE", "values": [ { "x": 1444773600000, "y": "9", "series": 4 }, { "x": 1446073200000, "y": "9", "series": 4 } ] } ]

当我走到这一步时,客户改变了主意,不想要需要此解决方案的功能。希望它可能对其他人有用。