我看到d3.svg.line()
的例子如下:
var altitude = some_array() // I read this from a .json file
y = d3.scale.linear().domain([0, d3.max(altitude)]).range([0 + margin, h - margin]),
x = d3.scale.linear().domain([0, altitude]).range([0 + margin, w - margin])
var line = d3.svg.line()
.x(function(d,i) { return x(i); })
.y(function(d) { return -1 * y(d); })
some_svg_group.append("svg:path").attr("d", line(altitude));
虽然我不太明白实际发生了什么,但我发现这是一种生成器函数,其中line().x
和line().y
是生成器函数的一种,显示的习语是一种方法,使x
数组与y
数组中的实际值相等。{/ p>
我想做的是将两个数组传递给d3.svg.line()
,比如说distance
和altitude
,或多或少是这样的:
var line = d3.svg.line()
.x(function_that_gives_distance)
.y(function_that_fives_altitude)
some_svg_group.append("svg:path").attr("something", line(some_other_thing));
有关替换这些占位符的建议吗?或者,如果他们错了,怎么实现呢?
答案 0 :(得分:1)
line.x
和line.y
实际上是访问者。传递给线生成器的数组表示一组数据点,访问器函数用于将每个数据点映射到适当的x和y像素坐标。
因此,考虑到这一点,使用2个独立的数组表示相同的数据点可能没有意义。您应该尝试提前将distance
和altitude
转换为单个数据点数组。然后,您可以定义x
和y
访问者,以将数据点上的属性映射到正确的像素位置。使用占位符术语,我认为实际上会调用function_that_gives_distance
和function_that_gives_altitude
作为数据点构造的一部分,而不是在行生成器的访问器中。
总而言之,将工作流分为两个步骤: