【问题标题】:D3 - stack function bar chart filterD3 - 堆栈函数条形图过滤器
【发布时间】:2018-07-02 16:23:09
【问题描述】:

我这里有一个密码笔 - https://codepen.io/anon/pen/WdWyem?editors=1010

我有一个带有图例的简单堆积条形图

我正在尝试使用图例来过滤条形图。

当我单击图例中的彩色块时,我想从图表中删除该条。

我有一些基本数据,我正在使用 D3 的堆栈来创建stackedSeries 并从数组'keys'中传递键

我使用相同的“键”来创建图例并向每个块添加一个类,即键的名称

当点击块时,我想捕获键名并将其从键数组中删除,然后再次运行堆栈函数并重新绘制图表。

这不起作用,我看不到如何更改键数组并重新运行堆栈和

我还没有想过要拿回酒吧。

stack = d3.stack()
    .keys(getKeys());

function getKeys() {
    console.log(keys)
    return keys
}

function createStack() {
    console.log('here');
    stackedSeries = stack(dataToStack);
}

createStack();

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    要重新绘制图表,您需要重新创建 stack,因此只需将您的 stack 创建移动到 createStack 函数中:

    function createStack() {
        stack = d3.stack()
            .keys(getKeys());
        console.log('here');
        stackedSeries = stack(dataToStack);
    }
    

    您还必须添加与条形颜色相关的逻辑。例如,您可以像更改 keys 数组一样动态更改 colors 数组

    【讨论】:

    • 我试过这个,但无论点击哪个块,它都会删除每个栏的顶部,而不是正确的部分
    • 我认为您对错误的颜色感到困惑。请检查此sample。我刚刚移动了stack 创建并添加了colors 数组更改:colors.splice(index, 1);
    • 抱歉,我错过了color.splice(index, 1)。你能解释一下这是如何工作的。我可以看到它去除了颜色,但我不明白为什么它会起作用
    • 假设我们没有改变颜色数组。在drawChart 函数中,我们遍历每一层(部分)并从colors 数组中分配颜色:1) 浅蓝色-usedInf 2) 深蓝色-newInf 3) 黄色-@987654336 @。当您删除第二层时,您将再次遍历每一层,并且对于两层,您将获得前两种颜色:1)浅蓝色 - 用于usedInf 2)深蓝色 - 用于totalInf。这就是为什么我们需要更改 color 数组以获得正确的颜色。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多