我有一个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'));
}
答案 0 :(得分:1)
关于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);
此“ fake groupAll”确保每次重绘numberDisplay
时,都会从维度中获取新的上限值。