d3.js - 如何绘制绘制数学函数的自动缩放 D3.js 图表?

标签 d3.js

我有a working jsfiddle这是我使用 JSXGraph 制作的,JSXGraph 是一个数学函数的图形工具包。我想将其移植到 D3.js 以供个人启发,但我很难开始。

jsfiddle 绘制了 -ke(-x/T) + k 的值,其中 x 是自变量,kt 的值 来自 slider 。

board.create('functiongraph',
  [
    // y = -k * e(-x/t) + k
    function(x) { return -k.Value()*Math.exp(-x/t.Value()) + k.Value(); },
    0
  ]
);

我最困惑的三件事:

  • 实际绘制图形及其轴 - 我不清楚应该使用 D3 API 的众多部分中的哪一个,或者应该在什么抽象级别进行操作。

    <
  • 当 slider 更改时重新渲染图表,并使图表了解 slider 的值。

  • 缩小图形,以便 y = k 定义的渐近线始终可见,并且不在图形的前 15% 内。我现在这样做:

    function getAestheticBoundingBox() {
      var kMag = k.Value();
      var tMag = t.Value();
      var safeMinimum = 10;
      var limit = Math.max(safeMinimum, 1.15 * Math.max(k.Value(), t.Value()));
    
      return [0, Math.ceil(limit), Math.ceil(limit), 0];
    }
    

解决这个问题的正确方法是什么?

最佳答案

threw this example together really quick ,所以不要因为代码质量而责怪我。但它应该为您提供一个良好的起点,帮助您了解如何在 d3 中执行此类操作。我直接在 d3 中实现了所有内容,甚至是 sliders .

正如 @LarKotthoff 所说,关键是你必须循环你的函数并构建你的数据:

// define your function
var func = function(x) {
  return -sliders.k() * Math.exp(-x / sliders.t()) + sliders.k();
},
// your step for looping function
step = 0.01;

drawPlot();

function drawPlot() {

  // avoid first callback before both sliders are created
  if (!sliders.k ||
      !sliders.t) return;

  // set your limits
  var kMag = sliders.k();
  var tMag = sliders.t();
  var safeMinimum = 10;
  var limit = Math.max(safeMinimum, 1.15 * Math.max(kMag, tMag));

  // generate your data
  var data = [];
  for (var i = 0; i < limit; i += step) {
    data.push({
      x: i,
      y: func(i)
    })
  }

  // set our axis limits
  y.domain(
    [0, Math.ceil(limit)]
  );
  x.domain(
    [0, Math.ceil(limit)]
  );

  // redraw axis
  svg.selectAll("g.y.axis").call(yAxis);
  svg.selectAll("g.x.axis").call(xAxis);

  // redraw line
  svg.select('.myLine')
    .attr('d', lineFunc(data))
}

关于d3.js - 如何绘制绘制数学函数的自动缩放 D3.js 图表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29755411/

相关文章:

javascript - 在折线图+条形图中使用 d3 画笔时出现问题(放大折线图+条形图)

javascript - d3.js:如何获取拖动的事件信息

d3.js 类似仪表的弧初始化和转换

javascript - 使用 d3js 遍历 SVGElement 路径?

javascript - 在 d3 中的图表上渲染之前简化一条线

javascript - 在 D3.js 4.x 力模拟中将选择矩形与缩放和平移相结合

php - 连接postgres和php,使用d3.js可视化

d3.js - 如何在d3.js中从内部JSON数组而不是从外部资源/文件中加载可折叠树的数据?

d3.js - 根据新的 .csv 更新 choropleth 中的数据?

javascript - 如何拖放矩形