在数字中显示尺寸的最大值显示dc.js

时间:2019-04-02 22:57:24

标签: dc.js crossfilter

我有一个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'));
}

1 个答案:

答案 0 :(得分:1)

一点背景

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

我们最近添加了一些方法来阐明dataTabledataCountI 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,这仍然不是您所需要的。减少最大值的明显方法是查看每个增加的值是否大于当前最大值,但是要删除该值,基本上需要对所有内容进行排序。

解决方案

因此,长话短说,而且您已经知道:您所做的基本上是对的,但您需要一种将实况号码提供给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);

此“ fake groupAll”确保每次重绘numberDisplay时,都会从维度中获取新的上限值。