nvd3 multibar - 更新具有不同图例状态的现有图表(就像它们被点击一样)

nvd3 multibar - update existing chart with different legend states (as if they were clicked)

我需要有关如何在 nvd3 multiBarChart(以及其他类似 stackedAreaChart、multiChart)中访问和 "update" 状态的帮助。我正在使用 nvd3 1.7.x 并有一个 运行 multiBarChart,其中包含来自 JSON 文件的一些源(状态)。此外,我有多个 JSON 文件用于不同的时间集,具有相同的来源(状态)。

我搜索了很多关于这个问题的答案和提示,在旧问题(旧的 nvd3 版本)nvd3 passing wrong event on stateChange (when clicking legend) after chart is reloaded and How to disable some streams by default in a nvd3 Simple Line Chart? 中只找到了 2 个匹配项,因为他们讨论了一个 bug 的解决方法关于 nvd3 1.1 或更早版本. 当我们在 2015 年更新到 1.7 并且状态函数发生了一些变化(getter、setter 等等)我想知道这个错误是否仍然存在以及如何使用新函数以正确的方式。注释和新文档并没有帮助我(仅针对已弃用的 defaultState 它被告知:使用 dispatch.stateChange(state); 相反)。


好的,我 do/need 做什么?: 我想将 changes/choices 保存在用户作为 "config" 变量创建的状态上,然后我想将这些状态恢复到使用不同数据(另一个 json 更新的相同图表对象文件)具有相同的可用状态。我的问题是,json 文件存储了我需要覆盖的默认状态设置,以防用户循环浏览数据集 - 否则他需要再次 select 流配置每次更改。

示例:假设我们有可用的堆叠和分组图表 运行 和一些流:stream1、stream2、stream3。默认情况下,图表加载堆叠视图并且所有 3 个流都在 json 文件中可见,例如“2015”。

chart.stacked(): {true}
chart.state.disabled: {"disabled":[false,false,false]}

因此,如果用户只想比较不同时间序列中的流 1 和 3,他 deactivates/klicks 在流 2 上:

chart.stacked(): {true}
chart.state.disabled: {"disabled":[false,true,false]}

然后存储此设置(这是有效的!)并需要为下一个数据集恢复(不同的 json 文件,例如“2014”)(目前无效)。


我有一个工作图表,它正在加载和显示不同的 json 文件。 selection 由下拉列表实现,事件由 jquery 触发。我可以通过获取以下值来保存状态:

chart.stacked();
chart.state.disabled;
chart.reduceXTicks();

当我覆盖保存的状态时,我可以在 chart.state.disabled 中看到新值,但是在 chart.update(); 之后它们消失了,我从 json 文件中看到默认状态 /from初始图表对象。

我已经尝试过不同的函数,例如调度函数 (changeState, stateChange),但我无法在图表更新后保留值。

//oldStates is a copy of the last states before switching to a new time set (json file) in the chart.
chart.state.disabled = oldStates; 
// works but chart.update overwrites it with default values!

chart.defaultState(oldStates);
// NO changes. marked as DEPRECATED in documentation saying: Use chart.dispatch.changeState(...) instead.

chart.dispatch.changeState(oldStates); 
// No change, not working?

我很高兴得到任何 hints/tipps 如何通过 overwriting/changing 单个状态更改状态并用它们更新图表,只渲染新的 selection。谢谢!

也许这有助于: http://plnkr.co/edit/CoGZkNoe4COEtjHMWtk6?p=preview

    data = data.map(function(series){
      if (series.key === 'Disabled Series Key'){
        series.disabled = true;
      }
      return series;
    });

您可以在将系列数组传递给图表之前,在系列数组中设置个别系列禁用属性。