javascript - 在 D3 中选择正确的插值,使路径(线)在路径(区域)内居中

标签 javascript d3.js svg interpolation

举例来说,考虑以下 D3 代码(仅相关部分,完整的代码(但仅长了不到十几行)位于 JSFiddle 上),它在带内绘制一条线。

    var points = [
    [200, 100],
    [200, 200],
    [100, 300],
    [100, 400]
    ];

    var areaGenerator=d3.area()
    .curve(d3.curveMonotoneY)
    .x0(function(d){return d[0]-20})
    .x1(function(d){return d[0]+20})
    .y0(function(d,i){return d[1]})
    .y1(function(d,i){return d[1]})
    ;
    var area = areaGenerator(points);

    svg.append('path')
    .attr('d', area);

    svg.append("path")
    .data([points])
    .attr("d", d3.line()
    .curve(d3.curveCardinal
    .tension(0.8)))
    .attr("id","line")

这是生成的 svg 对象的图像:

enter image description here

我已经尝试了 .tension() 的多个值,但我无法找到正确的插值函数来使线(大约)位于整个带的中间流,受到线和带的第一部分和最后部分应完全垂直的约束,并且它们不能向左或向右“放大”。

这就是我想要获得的,大约:

enter image description here

最佳答案

我原来的回答没有经过深思熟虑。您可以简单地将与红色路径相同的曲线属性应用于黑色路径: https://jsfiddle.net/s5o4hp3z/

只需将黑色路径更改为:

svg.append("path")
  .data([points])
  .attr("d", d3.line().curve(d3.curveMonotoneY))
  .attr("id","line")

-------- 原始答案 -------

您可以使用与用于红色区域的区域生成器类似的区域生成器,但宽度属性使其看起来像一条线。

我修改了您的 JSFiddle 以展示此内容:https://jsfiddle.net/6e03o42f/3/

我所做的是将路径创建更改为:

var lineAreaGenerator = d3.area()
  .curve(d3.curveMonotoneY)
  .x0(function(d){return d[0]-0.5})
  .x1(function(d){return d[0]+0.5})
  .y0(function(d,i){return d[1]})
  .y1(function(d,i){return d[1]});

var lineArea = lineAreaGenerator(points);

svg.append("path")
  .attr("d", lineArea)
  .attr("id","line")

如果这确实是您选择的方法,那么人们会希望将区域生成器代码分离到一个函数中。我已经在这个 JSFiddle 中展示了如何做到这一点:https://jsfiddle.net/6e03o42f/4/

希望这有帮助!

关于javascript - 在 D3 中选择正确的插值,使路径(线)在路径(区域)内居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57426153/

相关文章:

javascript - 从 C++ 调用 JavaScript 函数

JavaScript:循环数组

javascript - 按属性选择 d3.js 数据元素

javascript - 对象内的 svg 元素不会触发 css 动画

svg - 一个 SVG 文件,里面有很多 SVG 渐变

javascript - 通过 innerhtml 分配 ID 时,jquery ui 对话框不会打开

php - jQuery 自动完成标记新标签设计模式

javascript - 如何停止 d3.drag 在 chrome 中触发 mouseover/mouseout 事件

javascript - 增加我的 D3 树布局的节点之间的差距

css - Firefox 和 Opera : SVG & background-size results in bad rendering