折线图自定义X值访问器

Line Chart Custom X Value Accessor

本文关键字:访问 自定义 折线图      更新时间:2023-09-26

我正在画一张折线图。下面的数组不是传递给d3js的典型数据,所以我知道我需要编写一个自定义函数来访问正确的数据,如.x(function(d) { return xScale(parseDate(d.date)) })。这适用于包含对象的数组,但我似乎无法使它适用于包含值的对象数组(请参见balance)。我该怎么写?有没有更好的文档来编写这些访问者?我一直找不到一个一致和彻底的资源。

  var test_accounts = [
{name: "test1",
balance:
[
  {date: "2014-07-15", y: 20},
  {date: "2014-07-15", y: 10},
  {date: "2014-07-16", y: 40},
  {date: "2014-07-16", y: 10},
  {date: "2014-07-17", y: 4},
  {date: "2014-07-17", y: 10},
  {date: "2014-07-18", y: 30},
  {date: "2014-07-18", y: 10},
  {date: "2014-07-19", y: 10},
  {date: "2014-07-19", y: 10},
  {date: "2014-07-20", y: 0},
  {date: "2014-07-20", y: 10},
  {date: "2014-07-21", y: 10},
  {date: "2014-07-21", y: 10},
  {date: "2014-07-22", y: 80},
  {date: "2014-07-22", y: 10}
]},
{name: "test2",
balance:
[
  {date: "2014-07-15", y: 50},
  {date: "2014-07-15", y: 30},
  {date: "2014-07-16", y: 70},
  {date: "2014-07-16", y: 20},
  {date: "2014-07-17", y: 40},
  {date: "2014-07-17", y: 50},
  {date: "2014-07-18", y: 10},
  {date: "2014-07-18", y: 30},
  {date: "2014-07-19", y: 60},
  {date: "2014-07-19", y: 40},
  {date: "2014-07-20", y: 10},
  {date: "2014-07-20", y: 60},
  {date: "2014-07-21", y: 80},
  {date: "2014-07-21", y: 50},
  {date: "2014-07-22", y: 90},
  {date: "2014-07-22", y: 20}
]}
];
var line = d3.svg.line()
    .x(function(d) { return xScale(parseDate(d.date)) })
    .y(function(d) { return yScale(d.y) })
    .interpolate("linear");
// draw the line
var drawline = svg.selectAll("svg")
  .data(line1node).enter()
   .append("path")
    .attr("d", line)
    .attr("class", "line")
    .attr("stroke", function(d, i) { return linecolors(i); })
    .attr("stroke-width", 2)
    .attr("fill", "none")
    .attr("transform", "translate(0,0)");

注意:这只是一个代码片段,所以我省略了比例和轴,因为我知道它们很好用。

在哪里分配路径的"d"属性

.attr("d", line)

对于d是其基准的每个元素,line(d)最终被调用。CCD_ 6被期望为点的阵列。

由于您将数组嵌套在对象中,因此需要提供一个提取balance数组的函数:

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