2013-12-08 56 views
0

我有兩個圖:線條圖和氣泡圖。當我點擊泡泡圖時,我想要更新線圖,以便只用與「泡泡」相關的數據繪製它。這與標準實現不同,點擊會添加或刪除現有過濾器中的數據。dc.js中的過濾器和觸發器故障 - 重新繪製不同步

enter image description here

如果看一下圖像可以看到的是,雖然「模型0」被選擇所繪製的危險(y標尺在區1)不對應。

enter image description here

,現在當我點擊 '模式5',我得到相反的。

我當前的實現發佈爲jsfiddle here。我可以從附加的數據表中看到我達到了我想要的效果,但是線條圖不能正確重繪。實際上,它似乎是用最後的過濾器重新繪製的,而不是新的。

該實施方式從here入侵:特別是renderleton("filtered", function (chart) {行。但是,爲了完成這項工作,我不得不將第二個陰謀的plot1.filter(chart.filter());註釋掉。

我真的不明白爲什麼一個renderleton("filtered" ...on("postRedraw" ...聽衆需要在一起。

我一直在這個房子周圍,所以任何建議將非常感激地收到。

回答

1

我試圖簡化jsfiddle來隔離問題。這裏是適應的jsfiddle:http://jsfiddle.net/djmartin_umich/mKz7A/

您的plot2 keyAccessor從p.value.df訪問df值,而不是在df上使用維度。我的猜測是這是造成問題的原因。這裏是適應代碼:

dfDim = ndx.dimension(function (d) {return d.df;}); 
... 
plot2.width(300) 
    .height(250) 
    .dimension(dfDim) 

我也注意到你的plot2 valueAccessor和radiusAccessor沒有使用計算平均值。您的代碼會覆蓋從組中添加或刪除的每條記錄的est和estse。這裏是計算平均值的適應代碼:

dfGroup = dfDim.group().reduce(
     //add 
     function (p, v) { 
      ++p.count; 
      p.est += v.est; 
      p.avg_est = p.est/p.count; 
      p.estse += v.estse; 
      p.avg_estse = p.estse/p.count; 
      return p; 
     }, 
     //remove 
     function (p, v) { 
      --p.count; 
      p.est -= v.est; 
      p.avg_est = p.est/p.count; 
      p.estse -= v.estse; 
      p.avg_estse = p.estse/p.count; 
      return p; 
     }, 
     //init 
     function (p, v) { 
      return { 
       count: 0, 
       est: 0, 
       estse: 0, 
       avg_est: 0, 
       avg_estse: 0 
      }; 
     }); 

經過這些更改,我相信代碼的行爲就像您想要的那樣。

+0

欣賞這一點。沒有機會檢查,但將審查,重新發布,並儘快接受 – drstevok