【问题标题】:lineChart not updating even if using the same dimension即使使用相同的维度,lineChart 也不会更新
【发布时间】:2014-02-19 10:49:03
【问题描述】:

我有一个 lineChart 和一个有点复杂的 .valueAccessor 函数。我在同一维度和组上也有一个barChart

网页上还有其他几个图表,但在其他维度和组上。

当我使用其他图表之一进行过滤时,barChart 会正确更新,但lineChart 不会正确更新。有什么东西可以解释这种行为吗?

我想在设置 jsFiddle 之前获得反馈,因为我的数据量很大。

编辑:这里是fiddle。它在 ajax 调用中提取 7MB 的数据,因此需要一段时间才能运行。下面@DJMartin 提供的答案应该是我的解决方法,但它不起作用。

【问题讨论】:

  • 你能发布.valueAccessor的计算方法吗?

标签: d3.js bar-chart linechart dc.js


【解决方案1】:

来自交叉过滤器 API 参考:https://github.com/square/crossfilter/wiki/API-Reference

"注意:分组与交叉过滤器的当前过滤器相交,关联维度的过滤器除外。因此,组方法只考虑满足除此维度过滤器之外的每个过滤器的记录。因此,如果付款的交叉过滤器按类型和总计过滤,则 groupAll by total 仅按类型观察过滤器。”

如果您使用相同的属性创建第二个维度,则过滤将反映在图表中。

这是一个例子:http://jsfiddle.net/djmartin_umich/nw8EV/

teamMemberChart
        .width(270)
        .height(220)
        .dimension(teamMemberDimension)
        .group(teamMemberGroup)
        .valueAccessor(function (d) {
        return d.value.projectCount;
    })
        .elasticX(true);

    teamMemberChart2
        .width(270)
        .height(220)
        .dimension(teamMemberDimension)
        .group(teamMemberGroup)
        .valueAccessor(function (d) {
        return d.value.projectCount;
    })
        .elasticX(true);

    teamMemberChart3
        .width(270)
        .height(220)
        .dimension(teamMemberDimension2)
        .group(teamMemberGroup2)
        .valueAccessor(function (d) {
        return d.value.projectCount;
    })
        .elasticX(true);

前两个图表使用相同的维度 - 选择一个选项不会反映另一个选项。第三个图表在同一属性上使用不同的维度 - 在此图表上选择一个选项会更新其他两个图表。

【讨论】:

  • 感谢您的提琴。这正是我所需要的。不幸的是,它在我的网页中没有按预期工作。我为您重新创建了fiddle。由于 Ajax 调用会提取 7MB 的数据,因此运行需要一点时间。如果您能看一看,我将不胜感激。
  • 请尝试通过简化您的用例来隔离问题。如果没有自定义 reduce 和自定义 valueAccessor,您是否有同样的问题?你能用比 7MB 数据更简单的数据集重现问题吗?根据我的经验,孤立问题通常会导致您自己找到解决方案,但如果不是,如果您能多做一些初步的工作,我很乐意提供帮助。
  • 它确实适用于基本的访问器函数,所以我会朝那个方向看,可能会在这里提出一个单独的问题。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 2020-12-07
  • 2020-07-24
  • 1970-01-01
相关资源
最近更新 更多