无法进行交叉过滤

Unable to do cross filtering

所以有一个折线图工作正常,所以现在我尝试添加 2 个图表,以便我可以通过交叉过滤看到它们之间的交互。

当我从条形图 select 范围间隔时,我得到这个 错误:

VM357 dc.js:3697 Uncaught TypeError: Cannot read property 'domain' of undefined
    at prepareXAxis (VM345 dc.js:3697)
    at drawChart (VM345 dc.js:4426)
    at Object._chart._doRedraw (VM345 dc.js:4415)
    at Object._chart.redraw (VM345 dc.js:2138)
    at Object.dc.redrawAll (VM345 dc.js:279)
    at Object._chart.redrawGroup (VM345 dc.js:2190)
    at Object._chart.applyBrushSelection (VM345 dc.js:4296)
    at VM345 dc.js:4289
    at VM345 dc.js:1241

工作演示 + 代码:

https://blockbuilder.org/ninjakx/ad4ab375e1a14f3e151c5b13a60ecef5

该折线图有 2 种类型:

1) composite chartfunction comp_chart 下定义(行号:396-434

2) Single Line chart 定义在上面的旁边。

所以所有图表都在 第 558 行 中呈现。 function setup() line no: 529 也呈现了这两种折线图。

bar chart 定义在 composite2

我不知道如何解决这个错误。

编辑: 看看它现在对我有用。

抱歉,这不是一个完整的答案,因为我没有时间为您调试您的项目。我已经诊断出具体的问题,我有一个建议。

您遇到的具体问题是您将两个不同的图表初始化为同一个div,但一次只有一个处于活动状态:

var composite = dc.compositeChart("#line-chart");
var composite2 = dc.barChart("#line-chart2");

var linechart = dc.lineChart("#line-chart")

当你开始的时候,你在#line-chart中初始化了复合图表,但是另一个折线图没有初始化。可惜,dc.js还是会努力画出来的!这就是它崩溃的原因。

我的建议是只用复合图,显示individual状态时,只用一个子图重新初始化。

否则您将不得不经历繁琐的从图表注册表中添加和删除图表的过程,这很容易出错。

请注意,如果您先切换到 individual 状态,然后在条形图上进行过滤,您不会得到相同的错误,但您 运行 会遇到图例问题改为切换代码,因为它仍在尝试 read/update 复合图表,即使它不再存在。

我认为根据 div 中活跃的图表来调整所有代码会很头疼,而且每个 div 只包含一个图表应该更容易,尤其是因为折线图功能是组合的严格子集。