我有一个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'));
}
关于numberDisplay
的一个令人困惑的事情是,它最适合groupAll object,但它也适用于常规组(有一些困难)。
我们最近添加了一些方法来澄清dataTable
和dataCount
以及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。降低最大值的显而易见的方法是查看每个附加值是否大于当前最大值,但为了删除,您基本上需要对所有内容进行排序。
所以,长话短说,正如你所知道的那样:你所做的基本上是对的,但你需要一种方法来将这个实时数字输入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
时,新的顶部值将从维度中获取。