ホーム>source

こちらがフィドル 積み上げ棒グラフの場合。このグラフは、別の折れ線グラフをフィルタリングします。

空のビンを削除するために、私は試しましたdc.js FAQ、この例 そしてこの。

私が見たこの そしてこの 積み上げ棒グラフシナリオの場合、グループ化が異なります。 別のことを試してみましたが、機能させることができません。

単純なものが欠けているのは確かです。

コードを確認してください。私は何か間違っていますか? remove_empty_bins()を機能させるにはどうすればよいですか?

var stack = dc.barChart('#stack');
 var XDimension = ndx.dimension(function (d) {return d.no;});
          var YDimension_before = XDimension.group().reduce(
            function(p, d) {
              p[d.sub_no] = (p[d.sub_no]|| 0) + +d.avg;
              return p;
            },
            function(p, d) {
              p[d.sub_no] = (p[d.sub_no]|| 0) - +d.avg;
              return p;
            },
            function() {
              return {};});
         var YDimension = remove_empty_bins(YDimension_before);
      stack.width(550)
          .height(400)
          .dimension(XDimension)
          .group(YDimension, '1', sel_stack(1))
          .transitionDuration(500)
          .xUnits(dc.units.ordinal)
          .x(d3.scaleBand())
          .margins({left: 80, top: 20, right: 80, bottom: 80})
          .brushOn(false)
          .clipPadding(20)
          .elasticX(true)
          .elasticY(true)
          .title(function(d) {
          return [ d.key + '[' + this.layer + '] ',
                  d.value[this.layer]].join('\n')
          });
 stack.stack(YDimension, '2', sel_stack(2))
                      .stack(YDimension, '3', sel_stack(3))
function remove_empty_bins(source_group) {
          return {
              all:function () {
                  return source_group.all().filter(function(d) {
                     return d.value != 0;
                  });
              }
          };
      }

あなたの答え
  • 解決した方法 # 1

    問題は、オブジェクトに還元していることだと思うので、 d.value  ゼロに等しくなることはありません。

    Object.valuesとArray.someを使用して、ビンごとにスタックがゼロでないかどうかを確認できます。

    function remove_competely_empty_bins(source_group) {
              return {
                  all:function () {
                      return source_group.all().filter(function(d) {
                         return Object.values(d.value).some(v => v!=0);
                      });
                  }
              };
          }
    
    

    警告:異なるスタックが同じx値を持たない場合、dc.jsは満足できません。そのため、空のスタックだけを削除したくないのです。すべてのスタックがゼロの場合にのみビンを削除します。

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ ios - Callkit accpet呼び出しの自動化