2017-02-10 12 views
1

IはDCローチャートとヒストグラム(DCの棒グラフ)を含むダッシュボードを有しています。私のデータセットは100行と10のフィールドを持っています。 6つのフィールドはすべて100のデータポイントを有し、他の4つのフィールドは95のデータポイントおよび5つのブランクを有する。 1つのダッシュボードにすべてのフィールドを表示する必要があります。これは、ユーザーにとって透過的な方法です。ローチャートについてDC.js - ブランクデータポイントとヒストグラム

、私は単にブランクをグラフと空白がある場合に「未割り当て」に列名を設定する.LABEL()属性を使用します。

ヒストグラムについては、私は立ち往生しています。私は 'Unallocated'とヒストグラムの通常の線形の列を加えた列を表示したいと思います。ヒストグラムから空の行を隠すこともOKです。それは私がそれらを持っている6つのフィールドのためにそれらの行を見ることができなかったという意味、crossfiltered変数、事実から行を削除してしまうため

私は、ヒストグラムの後ろのディメンションにフィルタを適用することはできません。

標準の偽のグループは機能しません。ヒストグラムの場合、グループに入るまでに数値バケットが既に存在するため、グループには空白のキーがありません。自身に左

、DCはゼロとして空白を解釈し、それに応じてバケット。私は次元を制限しようと、これはゼロバケット5によって減少させることで動作します:

var dim = facts.dimension(function(d){ if (d[field]!='') { return Math.floor(+d[field]/binwidth)*binwidth; } }); 

しかし、これをやって、5行の数は、単に他のバケットの中で(それはそう)ランダムに分布しています。行のチャートで「Unallocated」をクリックすると、ヒストグラムにランダムなバケットが5つ表示され、バケットが2つ表示されることがありますが、何も表示しないと思っています。

私は、空白行をカウントアップ(それは常に5ではない)と私は偽の基を介してゼロビンからこれを引くことができればと思ったことができます。しかし、キーと値のペアを追加する方法や、key = 0の既存の値を調整する方法はありません。

var grp = dim.group().reduceCount(); 
    var grp2 = {all: function() { return grp.top(Infinity); }}; 

print_filterまたはconsole.logを使用して、構造を変更する方法がわかりません。長らく申し訳ありません。どんな助けにも感謝!別の列にそれらを置く

エマ

答えて

2

はリニアXスケールは非常によく、余分な/ NA /非数値に対応していないので、トリッキーになるだろう。

数字の列と非数値の列を一緒に使用するには、序数に切り替える必要があると思います。一種の乱雑ですが、可能です。

単純な考え方に焦点を当てて、それらの値をスキップしてみましょう。私はあなたが正しいところにいると思います。

問題は、ディメンションキー機能は常に値を返さないということです。

var dim = facts.dimension(function(d){ 
    if (d[field]!='') { 
     return Math.floor(+d[field]/binwidth)*binwidth; 
    } 
}); 

他の支店はちょうどを通じて低下し、JavaScript関数の暗黙的な戻り値はundefinedです。したがって、いくつかの数値キーと、undefinedキーを持つ行があります。私はクロスフィルタがその行で何をするのか分からないが、documentation specifies that the key function must returned naturally-ordered values以来、私は混乱するだろうと思う。

代わりに、この関数がヒストグラムのドメインからはるか遠い値を返すことがありますか?

var dim = facts.dimension(function(d){ 
    if (d[field]!='') { 
     return Math.floor(+d[field]/binwidth)*binwidth; 
    } 
    else return -1000; 
}); 

そして、それはfake group that screens out a particular valueを作成するのは簡単です:

function remove_bins(source_group) { // (source_group, bins...} 
    var bins = Array.prototype.slice.call(arguments, 1); 
    return { 
     all:function() { 
      return source_group.all().filter(function(d) { 
       return bins.indexOf(d.key) === -1; 
      }); 
     } 
    }; 
} 
var grp = remove_bins(dim.group(), -1000); 
+0

ゴードン、あなたは素晴らしいです。ありがとうございました)! – emma

関連する問題