【发布时间】:2017-01-22 22:57:12
【问题描述】:
这是我的示例fiddle
这是 2 个基本图表 dc.js 图表。我想了解的是图表如何相互作用。例如:
如果我在行图(右侧图表)上选择Aziz,则此图表中的其他值将显示为灰色,并且在环形图表(左侧图表)中2012 会填满整个环形图表。然后,如果我再次选择Aziz,两个图表都会重置。
如果我在环形图(左侧图表)上选择2012,则此图表中的其他值显示为灰色,而在行图中(右侧图表)Aziz 是行图中显示的唯一值(右图)。然后,如果我再次选择2012,两个图表都会重置。
基本上这种交互是如何运作的?
传递给这些图表的四个变量是 yearDim spendDim spendPerYear spendPerName 但这里唯一的共同点是 xfilter 也许就是这样,但这并不能完全解释它。谁能建议帮助我更好地理解这一点?
var xfilter = crossfilter(data1),
yearDim = xfilter.dimension(function(d) {return +d.Year;}),
spendDim = xfilter.dimension(function(d) {return Math.floor(d.Spent/10);}),
nameDim = xfilter.dimension(function(d) {return d.Name;}),
spendPerYear = yearDim.group().reduceSum(function(d) {return +d.Spent;}),
spendPerName = nameDim.group().reduceSum(function(d) {return +d.Spent;});
function render_plots(){
yearRingChart
.width(200).height(200)
.dimension(yearDim)
.group(spendPerYear)
.innerRadius(50);
spenderRowChart
.width(250).height(200)
.dimension(nameDim)
.group(spendPerName)
.elasticX(true);
dc.renderAll();
}
注意
here 和 here 可能相关,它在图表交互性上或未链接。
答案中的好图表示例here
编辑1
看到这个fiddle
如果我将这条线 .group(spendPerName) 更改为 .group(spendPerYear),则使用第二个图表,我现在将在两个图表上按相同的分组进行分组。这会改变图表的交互性。
现在我可以在行图上选择 2012 年,它将突出显示。我可以将其从突出显示切换为未突出显示。但是当它被突出显示并且我在行图中选择另一年时,它们都会崩溃(消失)。一直以来,环形图上什么都没有发生。
使用环形图,我可以选择一年,它会突出显示,切换它会突出显示年份,然后是整个戒指。但是一直以来,行图表上都没有发生任何事情。
因此它实际上已经失去了交互性。这可能是一个愚蠢的例子,但它可能会帮助我更好地理解它。 为什么它失去了交互性? 或者换句话说,我怎样才能在图表中以相同的方式呈现数据而不失去交互性?因此,如果我在行图上选择 2012,这将在环形图上突出显示(或显示为整个环)?也许这与我的数据集有关。
【问题讨论】:
-
Crossfilter 库负责协调数据上的过滤器并更新在过滤维度后创建的所有维度和组。 dc.js 库负责协调图表,因此在图表应用过滤器后,dc.js 会向图表组中的所有其他图表发出信号,通过重新查询它们使用的 Crossfilter 维度/组来更新自身。
-
@EthanJewett tks 如果我可以在 edit1 中以另一种方式提出问题,也许您可以帮助我更好地理解它?
标签: d3.js charts dc.js crossfilter