在numberDisplay dc.js中显示维度的最大值

问题描述 投票:2回答:1

我有一个csv文件,其中包含以下格式的几个城市的温度:

city    maxTemp
Vienna  25.5
Prague  24.4
Paris   24.3
Berlin  23.3
Athens  33.1

我正在创建一个仪表板,我想在numberDisplay中显示过滤城市的最高温度(点击其他DC.js图表​​时)。

我已经设法从维度中获得最大值,但是当城市被过滤时我无法改变它,我不知道应该用什么组和valueAccessor来显示numberDisplay中的最高温度。我该如何解决这个问题?

这是我尝试过的:

function show_avg_temp(ndx,element) {

   var maxTempDim = ndx.dimension(dc.pluck('maxTemp'));

   maxMaxTemp = maxTempDim.top(1)[0].maxTemp;

   console.log(maxMaxTemp);

   dc.numberDisplay(element)
      .group(??)
      .valueAccessor(??)
      .formatNumber(d3.format('.2'));
}
dc.js crossfilter
1个回答
1
投票

A little context

关于numberDisplay的一个令人困惑的事情是,它最适合groupAll object,但它也适用于常规组(有一些困难)。

我们最近添加了一些方法来澄清dataTabledataCount以及I opened an issue to do the same with numberDisplay的类似问题。

无论如何,这仍然不是你需要的,因为there is no efficient way to compute a min or max with a group or groupAll。降低最大值的显而易见的方法是查看每个附加值是否大于当前最大值,但为了删除,您基本上需要对所有内容进行排序。

A solution

所以,长话短说,正如你所知道的那样:你所做的基本上是对的,但你需要一种方法来将这个实时数字输入numberDisplay

最简单的方法是伪造一个groupAll对象可能具有的.value()函数,并告诉numberDisplay一个值只是一个值:

function dim_max_groupAll(dim, field) {
  return {
    value: function() {
      return dim.top(1)[0][field];
    }
  };
}
numberDisplay
  .group(dim_max_groupAll(maxTempDim, 'maxTemp'))
  .valueAccessor(x => x);

这个“假groupAll”确保每当重绘numberDisplay时,新的顶部值将从维度中获取。

© www.soinside.com 2019 - 2024. All rights reserved.