javascript - d3 js 折线图采用两种不同的数据格式。我如何区分这两者?

标签 javascript d3.js data-visualization

在研究d3的动画折线图时。

我遇到了两种不同的制作折线图的方法,但仍然无法区分两者之间的区别。

以下是两种情况。

1) 情况一 - 通过 .attr(d, line(data)) 绘制线条 2) 情况二 - 通过 .attr (d, function(d){return line(d)}) 画线

为什么有些情况下只调用line函数就可以画线, 而另一种情况要求我创建一个匿名函数并将行函数放入其中?

这是我遇到的示例案例。

1)案例一示例
https://bl.ocks.org/pjsier/28d1d410b64dcd74d9dab348514ed256

2)案例二示例
https://bl.ocks.org/phvaillant/53b90038b9c5ac5f6b817a4f63fbc2af

最佳答案

每当您看到 function(d) {...} 作为 .attr().style() 的参数时, .data().datum().each() 以及其他一些,d 指的是选择中每个元素的绑定(bind)数据。

但是如果您看到像第一种方法一样绘制的线:

.attr("d", line(data))`

选择中的每个元素都将被赋予相同的行:line(data)将为选择中的每个元素返回相同的值。如果您没有将任何数据绑定(bind)到选择,则可以采用此方法。要绘制多条不同的线,我们需要使用某种循环并更改 data 的值。如果将数据绑定(bind)到选择(这是 D3 的一个关键目的),您应该像第二种方法一样使用该绑定(bind)数据 - 如果您决定使用多行,则会更容易。

在第二种方法中:

.attr("d", function(d) { return line(d); })

选择中每个元素的绑定(bind)数据都会传递给 line(),因为每行的绑定(bind)数据可以不同,您可以拥有不同的行而无需显式循环。对于多行,这肯定是惯用的方法,但对于单行,老实说,差异可以忽略不计。

<小时/>

我实际上没有在第一个示例的链接中看到 .attr("d", line(data)),第一个示例的链接似乎有 .attr("d ", line),相当于第二个例子:

在第二个示例中,如下:

.attr("d", function(d) { return line(d); })

相当于:

.attr("d", line);

在更简单的行中,绑定(bind)数据被传递到 line 并针对选择中的每个项目执行 line。这是同一个 block updated来演示。

关于javascript - d3 js 折线图采用两种不同的数据格式。我如何区分这两者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60909768/

相关文章:

python - 如何使用 Python 禁用可绘制的等值线图的放大?

javascript - 读取 Deno 中记录到控制台的值

r - 如何将不同长度的时间序列围绕 ggplot 图形中的特定点居中

javascript - 使用 haxe 和 stdjs 的 webgl Flashdevelop

javascript - 动态更新 d3.js 树形图

javascript - 使用可变长度的新数据更新 d3 条形图标签

javascript - 如何将 d3.js 导入到 Angular 2?

r - 什么是显示字数的简单可视化工具?

javascript - Sweet.js 的惰性求值宏

javascript - 如何在 JavaScript 中获取两个对象数组之间的差异