DC很不錯,因爲您可以將維度和組直接傳遞給圖形對象本身,而且您不必手動更新交叉過濾器的更改。
如果您想將Crossfilter和NVD3連接在一起,則需要手動更新NVD3域/範圍或更改交叉過濾器尺寸/組狀態的數據。這基本上是Crossfilter頁面示例如何檢查源代碼的方式:http://square.github.io/crossfilter/。每當畫筆改變時,圖形都會重新繪製並更新以反映更改。
獲取NVD3圖表重繪和反映新數據非常簡單。您可以更新基準並再次調用條形圖...例如。
var svg = d3.select("body").append("svg").style("height", "500px");
var barChart = nv.models.multiBarChart();
// Just execute this block each time the chart data changes
// and the chart will update in a nicely animated manner
svg
.datum(chartData)
.transition()
.duration(500)
.call(barChart);
棘手的部分實際上是如果你想有刷到NVD3圖表的內置。這可能會變得棘手,因爲你必須保持刷子與NVD3圖表同步,因爲它們的數據被改變以便它們正確繪製,但是如果你只是想根據另一個圖表的刷子事件正確地更新NVD3圖表,或者你根本不在乎刷子,它根本不應該太難。在刷子上的很好的教程是在這裏:http://bl.ocks.org/mbostock/1667367
即使這麼說,NVD3即將暴露幾乎所有的底層圖表組件的非常好的(尺度,軸等),這意味着你可以訪問,添加和更新根據需要刷新,然後註冊畫筆事件,更新交叉過濾器,然後根據需要重新繪製圖表。
它也是開源的,所以你的其他選擇是分叉repo並直接將畫筆支持和事件添加到源代碼。
就我個人而言,我製作了一個自定義時間表圖表,當刷子更新時使用刷子和觸發事件。在這些事件上,我隨後更新了NVD3堆積條形圖的數據並重新繪製。因此,當您更改時間軸過濾器時,條形圖會進行動畫和更新。在行動中看到它很光鮮。
無論哪種方式,聽起來都像是一個有趣的挑戰。祝你好運!
我不知道有任何這樣的整合。如果很容易,完全取決於你對簡單的定義;如果不熟悉組件,我當然不會嘗試它。 –
我現在做的事情完全一樣,nvd3有一些漂亮的圖表,但沒有過濾器,dc.js過濾數據很好,但不是很漂亮。你能聯繫我嗎,我們可以分享一些經驗嗎? [email protected]。謝謝! –