无法进行交叉过滤
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 chart
在 function 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 只包含一个图表应该更容易,尤其是因为折线图功能是组合的严格子集。
所以有一个折线图工作正常,所以现在我尝试添加 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 chart
在 function 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 只包含一个图表应该更容易,尤其是因为折线图功能是组合的严格子集。