19

我有几行,我知道单击图例中的“点”将隐藏/显示它。

但是,我需要从一些被禁用且未显示的行开始,并且用户必须单击图例中的点才能将其显示在图表上。

(例如,我绘制了每种语言在 stackoverflow 上的问题数量,但默认情况下禁用了 C、PHP 和 javascript)。该图仅显示了 python、ruby ......但在图例中,您拥有所有语言,包括 C、PHP 和 js,而这 3 种语言被禁用。

我还没有找到每个数据系列的方法/属性来设置默认的显示/隐藏状态。我错过了什么吗?

4

4 回答 4

24

在阅读了这个答案之后,我仍然需要做更多的阅读,以便了解如何从我的 JSON 数据流中为图表设置禁用流。

下面的示例为我解决了问题disabled: true

    {
    key: "something",
    disabled: true,
    values: [...]
    }
于 2014-02-10T18:28:52.847 回答
14

您可以使用该chart.state()对象更改启用/禁用哪些流。例如:

// Assuming your chart is called 'chart'
var state = chart.state();

for(var i=0; i < state.disabled.length; i++) {
  state.disabled[i] = ...LOGIC RETURNING TRUE OR FALSE...;
}

chart.dispatch.changeState(state);
chart.update();
于 2013-07-10T05:41:45.070 回答
9

对于您想要禁用的每个数据系列,只需执行以下操作:

series.disabled=true

nvd3 并不能做所有事情,但是如果您愿意仔细阅读代码,它实际上是非常灵活的。我通过在几个图表模型的源代码中找到这条线发现了这一点:

state.disabled = data.map(function(d) { return !!d.disabled });
于 2013-06-13T02:29:04.860 回答
1

你可以从一个隐藏的图表开始,然后尝试这样的事情:

// Array of series you want to hide
var hidden = [0, 2];

// Dispatch click event to each element
var e = document.createEvent('UIEvents');
e.initUIEvent('click', true, true);
d3.select('.nv-legend')
  .selectAll('.nv-series')
  .filter(function(d, i){return hidden.indexOf(i) !== -1;})
  .node()
  .dispatchEvent(e);

完成后,取消隐藏您的图表,该系列将被禁用。

于 2013-06-06T18:10:01.487 回答