我不認爲在crossfilter或dc.js中有這樣的自動方法。但是如果您願意推出自己的維度包裝器,則可以提供該維度包裝器而不是原始維度對象,並將其轉發給所有基礎維度。
編輯:基於下面@亞拉文的小提琴,這裏是一個「維鏡」這樣的作品,至少在這個簡單的例子:
function mirror_dimension() {
var dims = Array.prototype.slice.call(arguments, 0);
function mirror(fname) {
return function(v) {
dims.forEach(function(dim) {
dim[fname](v);
});
};
}
return {
filter: mirror('filter'),
filterExact: mirror('filterExact'),
filterRange: mirror('filterRange'),
filterFunction: mirror('filterFunction')
};
}
它使用這個有點凌亂。對於你想從crossfilter A到鏡像到crossfilter B中的每個層面,你需要創建crossfilter B上鏡的尺寸,反之亦然:
// Creating the dimensions
subject_DA = CFA.dimension(function(d){ return d.Subject; });
name_DA = CFA.dimension(function(d){ return d.Name; });
// mirror dimensions to receive events from crossfilter B
mirror_subject_DA = CFA.dimension(function(d){ return d.Subject; });
mirror_name_DA = CFA.dimension(function(d){ return d.Name; });
subject_DB = CFB.dimension(function(d){ return d.Subject; });
name_DB = CFB.dimension(function(d){ return d.Name; });
// mirror dimensions to receive events from crossfilter A
mirror_subject_DB = CFB.dimension(function(d){ return d.Subject; });
mirror_name_DB = CFB.dimension(function(d){ return d.Name; });
現在你綁在一起時,魚目混珠的圖表:
// subject Chart
subjectAChart
.dimension(mirror_dimension(subject_DA, mirror_subject_DB))
// ...
// subject Chart
subjectBChart
.dimension(mirror_dimension(subject_DB, mirror_subject_DA))
// ...
nameAChart
.dimension(mirror_dimension(name_DA, mirror_name_DB))
// ...
nameBChart
.dimension(mirror_dimension(name_DB, mirror_name_DA))
// ...
由於所有的圖表都implicitly on the same chart group,重繪事件將自動獲得它們之間的傳播,他們被過濾的時候。並且每個交叉過濾器上的每個過濾器操作都將應用到另一個交叉過濾器上的鏡像尺寸。
也許不是我想建議這樣做,但像往常一樣,它可以使工作。
這裏的小提琴:https://jsfiddle.net/gordonwoodhull/7dwn4y87/8/
我與兩個數據集有相同的情況進行比較。如果我點擊數據集1中的一個項目,它將在數據集2圖表中反映相同。你能否告訴我一個更好的方法來處理這個問題。 –
這是我所知道的最好的方式,除了@ Ethan的建議將數據組合成一個交叉過濾器(以便它成爲數據問題而不是邏輯問題)。你試過這個嗎?它是如何失敗的? – Gordon
https://jsfiddle.net/caravinden/y8tts7eo/ @Gordon在這個例子中,我怎樣才能同步兩個圖形之間的點擊事件? –