2017-01-07 4 views
1

dc.jsの行チャートを作成するときにデータが失われます。私は enter image description heredc.jsを使用して行チャートをレンダリングするとデータが失われる

が、私は私の結果は

enter image description here

であることを期待している:

var ndx = crossfilter(data); 

    var emailDimemsion = ndx.dimension(function(d) { 
    return d.email; 
    }); 

    var emailGroup = emailDimemsion.group().reduce(
    function(p, d) { 
     ++p.count; 
     p.totalWordCount += +d.word_count; 
     p.studentName = d.student_name; 
     return p; 
    }, 
    function(p, d) { 
     --p.count; 
     p.totalWordCount -= +d.word_count; 
     p.studentName = d.student_name; 
     return p; 
    }, 
    function() { 
     return { 
     count: 0, 
     totalWordCount: 0, 
     studentName: "" 
     }; 
    }); 


    leaderRowChart 
    .width(600) 
    .height(300) 
    .margins({ 
     top: 0, 
     right: 10, 
     bottom: 20, 
     left: 5 
    }) 
    .dimension(emailDimemsion) 
    .group(emailGroup) 
    .elasticX(true) 
    .valueAccessor(function(d) { 
     return +d.value.totalWordCount; 
    }) 
    .rowsCap(15) 
    .othersGrouper(false) 
    .label(function(d) { 
     return (d.value.studentName + ": " + d.value.totalWordCount); 
    }) 
    .ordering(function(d) { 
     return -d.value.totalWordCount 
    }) 
    .xAxis() 
    .ticks(5); 

    dc.renderAll(); 

フィドルはここにある、https://jsfiddle.net/santoshsewlal/6vt8t8rn/

私のグラフは次のように出てきます何らかの形でデータを省略するためにreduce関数を使いこなしましたか?

おかげ

答えて

0

は残念ながらcrossfilterを使用してdc.jsグラフの注文の2つのレベルがあります。

まず、dc.jsはgroup.top(N)を使用して上位Nをプルします.NはrowsCapの値です。 Crossfilterはこれらの項目をgroup.order functionに従ってソートします。

次に、chart.ordering機能を使用してアイテムを再びソートします。

このような場合、2番目の並べ替えは、最初の並べ替えが正しく機能しなかったという事実を隠すことができます。 Crossfilterは、どのフィールドを見るかを指定しない限り、オブジェクトのソート方法を知らないので、代わりにgroup.top(N)がランダムな項目を返します。

あなたはcrossfilterグループのorder試合をすることによって、あなたのチャートを修正することができ、グラフのordering

emailGroup.order(function(p) { 
    return p.totalWordCount; 
}) 

フォークあなたのフィドルの:それははるかに長いワードカウントを持つ一人の学生があるに見えるhttps://jsfiddle.net/gordonwoodhull/6vt8t8rn/6/

、それ以外の場合はスプレッドシートと一致します:

fixed row chart

group.topの使用を中止する予定です。これは、現在の動作が非常に矛盾しているためです。

https://github.com/dc-js/dc.js/issues/934

更新:あなたは不安定な最新バージョンを使用して喜んでいる場合は、2.1.4をdc.jsとアップgroup.top使用していません - キャッピングがchart.orderingによって決定され、capMixin.cap、そして唯一のcapMixin.takeFront

+0

この現象の回避策はありますか?問題は、カテゴリに基づいてデータのサブセットを表示するために偽のグループを使用する必要があることです。通常のグループと偽のグループ、https://jsfiddle.net/santoshsewlal/tmqwvxee/を使用すると、私のフィドルは違いを示します。一貫した問題ではありません。ドロップダウンから2月を選択するのは問題ありませんが、12月は選択しません。 私はカテゴリごとのチャート(フィドルのdtype)にしたいと思います。私のグラフをレンダリングするより良い方法はありますか? –

+0

@SantoshSewlal、私は上記の修正を明確にしました。最新バージョンに関する注記も参照してください。 – Gordon

関連する問題