【发布时间】:2017-02-12 23:32:06
【问题描述】:
使用同一数据集的不同维度,屏幕上有三个 dc.js 折线图。
当用户单击任何 lineChart 上的数据点时,我希望从所有其他图表中找到并返回该对应点的数据值,包括单击的那个。
我还尝试(在鼠标悬停时)将悬停的数据点的圆形填充颜色更改为红色,以及所有其他图表的相应数据点(相同的“x”值)。
我正在使用.filter() 方法,但未能成功获取所需数据。错误信息是:"Uncaught TypeError: myCSV[i].filter is not a function"
lc1.on('renderlet', function(lc1) {
var allDots1 = lc1.selectAll('circle.dot');
var allDots2 = lc2.selectAll('circle.dot');
var allDots3 = lc3.selectAll('circle.dot');
allDots1.on('click', function(d) {
var d2find = d.x;
var d2find2 = d3.select(this).datum();
console.log(myCSV);
alert('Captured:'+"\nX-axis (Date): "+d2find2.x +"\nY-axis (Value): "+ d2find2.y +"\nDesired: display corresponding values from all three charts for this (date/time) datapoint");
allDots2.filter(d=>d.x == d2find2).attr('fill','red');
findAllPoints(d2find2);
});//END allDots1.on(click);
function findAllPoints(datum) {
var objOut = {};
var arrLines=['car','bike','moto'];
for (var i = 0; i < 3; i++) {
thisSrx = arrLines[i];
console.log('thisSrx: '+thisSrx);
console.log(myCSV[i].date)
console.log(datum.x);
//loop thru myCSV obj, compare myCSV[i].date to clicked "x" val
//build objOut with data from each graph at same "X" (d/t) as clicked
objOut[i] = myCSV[i].filter(e => e.date === datum.x)[0][thisSrx];
}
$('#msg').html( JSON.stringify(objOut) );
console.log( JSON.stringify(objOut) );
}//END fn findAllPoints()
});//END lc1.on(renderlet)
【问题讨论】:
标签: dc.js