2017-01-12 8 views
0

は、私が(ちょうどサンプル - それは大きいです)、このCSVデータを得た:D3折れ線グラフ - エラー:<path>属性D:予想される数

value;count 
25;1 
28;1 
29;3 
31;2 
34;1 
36;1 
37;2 

私は日付機能なし線グラフを示す任意の例を見つけることができませんでしたこの例をリニアスケールに変更しましたが、動作しません。私はこのコードで折れ線グラフを作成しようとしていますが、私はエラーを取得:属性dは:予想される数

// set the dimensions and margins of the graph 
var margin = {top: 20, right: 20, bottom: 30, left: 50}, 
    width = 960 - margin.left - margin.right, 
    height = 500 - margin.top - margin.bottom; 


// set the ranges 
var x = d3.scaleLinear().range([0, width]); 
var y = d3.scaleLinear().range([height, 0]); 

// define the line 
var valueline = d3.line() 
    .x(function(d) { return x(d.value); }) 
    .y(function(d) { return y(d.count); }); 

// append the svg obgect to the body of the page 
// appends a 'group' element to 'svg' 
// moves the 'group' element to the top left margin 
var svg = d3.select("body").append("svg") 
    .attr("width", width + margin.left + margin.right) 
    .attr("height", height + margin.top + margin.bottom) 
    .append("g") 
    .attr("transform", 
      "translate(" + margin.left + "," + margin.top + ")"); 

// Get the data 
d3.csv("exp2.csv", function(error, data) { 
    if (error) throw error; 

    // format the data 
    data.forEach(function(d) { 
     d.value = +d.value; 
     d.count = +d.count; 
    }); 

    // Scale the range of the data 
    x.domain([0, d3.max(data, function(d) { return d.value; })]); 
    y.domain([0, d3.max(data, function(d) { return d.count; })]); 

    // Add the valueline path. 
    svg.append("path") 
     .data([data]) 
     .attr("class", "line") 
     .attr("d", valueline); 

    // Add the X Axis 
    svg.append("g") 
     .attr("transform", "translate(0," + height + ")") 
     .call(d3.axisBottom(x)); 

    // Add the Y Axis 
    svg.append("g") 
     .call(d3.axisLeft(y)); 

}); 
+0

そのCSVは正しいですか? CSVは**カンマ**で区切られています...とにかく、コードに問題はありません:https://jsfiddle.net/gerardofurtado/8q3rhn5x/ –

答えて

1

を@GerardoFurtadoは、あなたのデータはcsvではありません指摘したように(すなわちカンマ分離)が、セミコロンを分離しました。私の最初の考えは、これをthis questionの複製としてクローズすることでしたが、構文がバージョン4で十分に変更されたため、新しい回答が保証されているように見えます。

// set up a parser 
var parser = d3.dsvFormat(';').parse; 

// get the data as text 
d3.text("exp2.csv", function(error, data) { 

    if (error) throw error; 

    // now parse the data 
    data = parser(data); 

    // format the data 
    data.forEach(function(d) { 
    d.value = +d.value; 
    d.count = +d.count; 
    }); 

    ... 

はここでフルrunning exampleです:

はこれを行います。

+0

私は完全なデータセットで試しましたが失敗します - http://plnkr.co/編集/ XQbRDNJzUfMxOh8Y1S7q?p = previewパーサーを削除し、データを実際のCSVにしました。データセットが大きすぎますか? – darude

+0

@darude、あなたはファイルを**コンマ**に変更しました。あなたの質問に**セミコロン**があり、それが私の答えの全理由でした。ファイルを**コンマ**に変更した場合、[元のコードは正しい](http://plnkr.co/edit/EFuRGfFftIqlM1dOxFcQ?p=preview)。 – Mark

+0

ああ、私は見る - d3.csv( "exp2.csv"、関数(エラー、データ)x d3.text( "exp2.csv"、関数(エラー、データ)。 – darude

関連する問題