DC.js - 在满足条件时触发弹性调整大小

时间:2014-01-28 05:34:23

标签: javascript d3.js crossfilter

当删除最大值时,我想触发某些图形中异常值的弹性大小调整。这是我到目前为止所做的:

dmsn = ndx.dimension(...)
groupTotal = dmsn.group().reduceSum(...)

row
  .width(100)
  .height(100)
  .dimension(dmsn)
  .group(groupTotal)

document.addEventListener('mouseup',function(){
  setTimeout(function(e){
    newTop = groupTotal.top(1)[0].value;
    ratio = newTop / origTop;
    if(ratio < .1){
        row.elasticX(true);
        dc.redrawAll('groupTotal');
    } else {
        row.elasticX(false);
        dc.redrawAll('groupTotal');
    }
  },1);
}, true);

该函数检查新的最高值是否足够小以至于重新调整是否有用。

超时可确保在应用过滤器后正确计算比率。然而,这也意味着应用新弹性的机会已经过去。不幸的是,redrawAll似乎不适用于此。

有关修复此实施或以其他方式实现此目的的任何建议吗?

1 个答案:

答案 0 :(得分:2)

对于任何好奇的人来说,这是如何实现这一点的。当最大电流条太小(或很大)有价值时,这会导致轴的条件缩放。

var currentMax = 0,
    ratio,
    chartMax = groupData.top(1)[0].value; // initialize with largest value

row
  .on('postRedraw', function(chart){
    currentMax = groupData.top(1)[0].value; // after redraw, capture largest val
    ratio = currentMax/chartMax;
    if(ratio < .1 || ratio > 1){ // check if bars are too small or too large
        row.elasticX(true);
        chartMax = currentMax; // always be sure to reset the chartMax
        dc.redrawAll();
    } else {
        row.elasticX(false);
        chartMax = currentMax;
    }
  });
相关问题