我遇到了尝试在系列图上的点之间插值的问题,即我的数据如下所示(请假设随机的x,y坐标)
[[x0,y0],[1,1],[2,2],[2,3],..... [x,y]]
并且从内插器中,我想给它1.5并且内插器函数应该为这种情况返回1.5。在数据是随机的其他情况下,它应该找到最适合给定点集并返回给定x值的y值
这可以使用d3 interpolate ***函数吗?
由于
答案 0 :(得分:1)
虽然您可以使用d3插值器执行此操作,但使用muli-part linear scale可能会更容易。
通常,线性标度具有双值域和双值范围,所有其他值均根据域和范围的起点和终点之间的直线计算。但是,您可以将域和范围都设置为多个值的数组(只要两个数组的长度相同),并且该比例将充当域的每个部分的一系列直线关系。
换句话说,如果您使用x值的数组作为比例域,并将y值的数组作为范围,那么您可以输入任何x值,比例将返回线性相邻y值之间的插值。对于点之外的值,它将推断初始或最终的线性关系:
var points = [
[0,10],
[1,32],
[2,14],
[3,15]
];
var multiLine = d3.scale.linear()
.domain(
points.map(function(p){return p[0];})
)
.range (
points.map(function(p){return p[1];})
);
document.body.innerHTML =
"Line at 0.0: " + multiLine(0) + "<br/>" +
"Line at 1.0: " + multiLine(1) + "<br/>" +
"Line at 1.5: " + multiLine(1.5) + "<br/>" +
"Line at 2.3: " + multiLine(2.3) + "<br/>" +
"Line at 3.0: " + multiLine(3) + "<br/>" +
"Line at 4.0: " + multiLine(4) ;
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
&#13;
请注意,您需要确保您的积分按x值排序,以使其按预期工作。