0

私はd3が初めてなので、質問には明らかな答えがあることをお詫びします。そのようなjsonファイルとして入力を使用して単純なパスを作成しようとしています

    var data = [{"date":"2012-10-22","debit":"150.00"},
                {"date":"2012-10-29","debit":"1650.00"}, .....

そして、私はスケールを作ろうとしています

    var x = d3.time.scale()
            .domain(d3.extent(data, function(d) { return (d.date); }))
            .range([0, w]);

d3.extend は正しい値を返しますが、これを行とパスに入力すると NaN になります。以下は私のコードです

    var margin = {top: 20, right: 50, bottom: 30, left: 50},
        w = 600 - margin.left - margin.right,
        h = 400 - margin.top - margin.bottom,
        barPadding = 3,

    var debitMax = d3.max(data, function (d) { return + d.debit;});
    var x = d3.time.scale()
            .domain(d3.extent(data, function(d) { return (d.date); }))
            .range([0, w]);
    var y = d3.scale.linear()
            .domain([0, debitMax])
            .range([h, 0]);

    var valueline = d3.svg.line()
            .x(function(d) { return x((d.date)); })
            .y(function(d) { return y(d.debit); })
            .interpolate("basis");

    var svgContainer = d3.select("div").append("svg")
            .attr("width", w + margin.left + margin.right)
            .attr("height", h + margin.top + margin.bottom)

    var debitPath = svgContainer
            .append("path")
            .attr("d", valueline(data));

そして、これが私がfirebugで得たものです

           Error: Problem parsing d="MNaN,318.181818 ..........

ありがとう

4

1 に答える 1

0

JSON の日付は、実際には Javascript が賢明な方法で処理できるものではありません。日付オブジェクトに解析する必要があります。d3 は、このためのさまざまな機能を提供します (ドキュメントを参照してください)。あなたの場合、次のようなものが必要になります

var parseDate = d3.time.format("%Y-%m-%d").parse;
...
.domain(d3.extent(data, function(d) { return parseDate(d.date); }))
...
.x(function(d) { return x(parseDate(d.date)); })
于 2013-03-03T12:31:48.410 に答える