2017-06-15 38 views
0

有谁知道如何禁用绘制后的流?NVD3切换流

我正在寻找在页面加载后修改活动流,并且用户点击了页面不同部分的按钮。

我一直在研究代码来模拟点击事件后,它确定它的状态,但这似乎有点笨重和缓慢。

编辑: 按照要求,这里是一个NVD3图表与多个数据流(在图例中找到的数据系列)的example

在图表渲染之后,我正在寻找一个函数,可以在一次调用中启用/禁用多个流(例如数据0,数据1等)。

我正在处理点击事件给标签的东西,但认为必须有更好的方法。

<div id="chart"> 
    <svg></svg> 
</div> 

var data = function() { 
    return stream_layers(4,10+Math.random()*10,.1).map(function(data, i) { 
    return { 
     key: 'Data ' + i, 
     values: data 
    }; 
    }); 
} 

function stream_layers(n, m, o) { 
    if (arguments.length < 3) o = 0; 

    function bump(a) { 
     var x = 1/(.1 + Math.random()), 
      y = 2 * Math.random() - .5, 
      z = 10/(.1 + Math.random()); 
     for (var i = 0; i < m; i++) { 
      var w = (i/m - y) * z; 
      a[i] += x * Math.exp(-w * w); 
     } 
    } 
    return d3.range(n).map(function() { 
     var a = [], 
      i; 
     for (i = 0; i < m; i++) a[i] = o + o * Math.random(); 
     for (i = 0; i < 5; i++) bump(a); 
     return a.map(stream_index); 
    }); 
} 

function stream_index(d, i) { 
    return { 
     x: i, 
     y: Math.max(0, d) 
    }; 
} 

nv.addGraph(function() { 
    var chart = nv.models.multiBarChart(); 

    chart.multibar.stacked(false); 
    chart.showControls(false); 
    chart.showLegend(true); 
    chart.reduceXTicks(false); 

    d3.select('#chart svg') 
     .datum(data()) 
     .transition().duration(500).call(chart); 

    nv.utils.windowResize(chart.update); 

    return chart; 
}); 
+1

你可以提供你的意思的例子吗?还包括一个JSFiddle/Plunkr与您当前的代码。 – jeznag

+0

@jeznag完成。谢谢。 – Searle

回答

0

找到我的答案..

以下工作

chartData[i].disabled = true; // chartData = original data object fed to NVD3 chart 
chartData[i].userDisabled = true; 
chart.update(); // chart = a reference to your NVD3 chart instance.