用 d3.js / c3.js 替换图表数据集

Posted

技术标签:

【中文标题】用 d3.js / c3.js 替换图表数据集【英文标题】:Replacing chart datasets with d3.js / c3.js 【发布时间】:2015-02-14 18:13:58 【问题描述】:

DEMO HERE

在演示中,我尝试卸载所有当前数据集并像这样加载新数据集:

使用 C3.js

chart.unload();
chart.load(
    columns: [
        ['data1', 130, 120, 150, 140, 160],
        ['data2', 30, 20, 50, 40, 60, 50],
    ],
);

这显然不是演示所示处理此过程的正确方法,它无法正常工作。

C3 教程指出数据集应该像这样替换:

chart.load(
    columns: [
        ['data1', 130, 120, 150, 140, 160],
        ['data2', 30, 20, 50, 40, 60, 50],
    ],
    unload: ['data3', 'data4', 'data5'],
);

演示再次显示这可以正常工作...

问题

如何卸载所有个当前数据集并用新数据集替换它们,而无需指定它们各自的数据名称(data3,data4)等?

注意:数据集的名称和数量是可变的,因此我只想卸载所有。

基本上我想做的就是在点击时用新的数据集替换数据集。

【问题讨论】:

【参考方案1】:

我不知道它是否对你有用,过去我使用过这个(在相同的加载函数中卸载)。对于您的代码,它应该是

chart.load(
     columns: [
          ['data1', 130, 120, 150, 140, 160, 150],
          ['data4', 30, 20, 50, 40, 60, 50],
      ],
     unload: chart.columns,
);

工作fiddle

$('#A').on('click', function () 

    chart.load(
        columns: [
            ['data1', 130, 120, 150, 140, 160, 150],
            ['data4', 30, 20, 50, 40, 60, 50],
        ],
            unload: chart.columns,
    );
);

$('#B').on('click', function () 
    chart.load(
        columns: [
            ['data1', 130, 120, 150, 140, 160, 150],
            ['data4', 30, 20, 50, 40, 60, 50],
        ],
        unload: chart.columns,
    );
);

【讨论】:

感谢您的意见,但正如我上面提到的,这是推荐的方法。我需要能够在不指定名称的情况下卸载所有数据集。 @Obsidian 我已经更新了我的答案。是你要找的吗? 不应该卸载刚刚添加的列吗?

以上是关于用 d3.js / c3.js 替换图表数据集的主要内容,如果未能解决你的问题,请参考以下文章

Javascript / D3.js - 绘制大型数据集 - 提高 d3.js 绘制的 svg 图表中的缩放和平移速度

使用给定的 javascript 库之一创建图表

D3.js - 从JSON创建多环圆环图数据集

D3.js-柱形图

创建一个标签“<text>”部分的单词被剪切。 c3.js - d3.js

有没有办法用 D3.js 修改 Vega 图表?