javascript - 过滤数据并使用比例 - d3js

标签 javascript d3.js

我在 d3js 中有一个简单的散点图。可视化的目的是淡出选区上的点。这有效。与此一致,新的趋势线应该仅针对那些选定的点以及更新的斜率方程和 R2 值出现。点的淡化和斜率方程/R2值的更新正在进行选择。但是,趋势线似乎被 chop 并且未正确缩放,但我不明白为什么。

Here is a working version.

on.change之后执行以下代码:

filteredData  = filterJSON(data, 'name', value); // gets filtered json data

  var x = d3.scaleLinear()
      .range([0,width]);

  var y = d3.scaleLinear()
      .range([height,0]);


  var xSeries1 = filteredData.map(function(e) { return e.x; }); // new x values
  var ySeries1 = filteredData.map(function(e) { return e.y; }); // new y values
  var rsq1 = leastSquares(xSeries1,ySeries1); // calculates r2/slope etc. - see function below

 // Add trendline
  ptAx1 =  d3.min(xSeries1);
  ptAy1 =  rsq1[0] *  d3.min(xSeries1) + rsq1[1];
  ptBy1 =  d3.min(ySeries1);
  ptBx1 =  (d3.min(ySeries1) - rsq1[1]) / rsq1[0];



  svg.append("line")
        .attr("class", "regression")
        .attr("x1", x(ptAx1))   
        .attr("y1", y(ptAy1))
        .attr("x2", x(ptBx1))
        .attr("y2", y(ptBy1));




// calculate linear regression
function leastSquares(xSeries,ySeries) {

  var reduceSumFunc = function(prev, cur) { return prev + cur; };

  var xBar = xSeries.reduce(reduceSumFunc) * 1.0 / xSeries.length;
  var yBar = ySeries.reduce(reduceSumFunc) * 1.0 / ySeries.length;

  var ssXX = xSeries.map(function(d) { return Math.pow(d - xBar, 2); })
    .reduce(reduceSumFunc);

  var ssYY = ySeries.map(function(d) { return Math.pow(d - yBar, 2); })
    .reduce(reduceSumFunc);

  var ssXY = xSeries.map(function(d, i) { return (d - xBar) * (ySeries[i] - yBar); })
    .reduce(reduceSumFunc);

  var slope = ssXY / ssXX;
  var intercept = yBar - (xBar * slope);
  var rSquare = Math.pow(ssXY, 2) / (ssXX * ssYY);

  return [slope, intercept, rSquare];
}

此代码在所有数据点(未过滤数据)时运行良好,但在发生过滤时则不然。

这就是所有点 - 趋势线确定 enter image description here

这是过滤点 - 趋势线被 chop enter image description here

最佳答案

在为 ptBy1 和 ptBx1 赋值时,您似乎将“min”留在了“max”的位置

在您的“blockbuilder”中进行了此更改,它似乎按预期工作。

关于javascript - 过滤数据并使用比例 - d3js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41387431/

相关文章:

javascript - 将图像放置在折线图中的 Y 轴标签上

javascript - 如何在create-react-app中使用react-d3-components

javascript - Socket.io 无法将数据发送到客户的唯一房间

javascript - Web 音频 api 振荡器的内存泄漏

javascript - Sails + ReactJS : Unexpected token, 找不到原因

javascript - 在 d3.js 中创建值而不是随机数据

javascript - D3JS 选择 selectAll

javascript - 将硬编码固定线添加到 d3 条形图

javascript - 使用 javascript 从列表框中删除(取消选择)所选项目

javascript - 暂时禁用 JS 事件并了解 JS 事件处理的工作原理