2012-02-13 8 views
42

*.csvファイルにリンクされたテーブルをd3を使用して作成しようとしていますが、空白のWebページしかありません。 クリミアの例でも空白のページが表示されます。
私が間違ってやっていることの実例や示唆を指示したり、示したりすることに感謝します。csvファイルにリンクされたテーブルを作成する

+5

問題を再現したコードを表示してください。 – Dogbert

+0

selection.data()のD3ドキュメントに記載されている例も参照してください。https://github.com/mbostock/d3/wiki/Selections#data – DGrady

答えて

80

あなたはCSVデータからHTMLテーブルを作成する方法について求めているならば、これはあなたが望むものである:

d3.csv("data.csv", function(data) { 
    // the columns you'd like to display 
    var columns = ["name", "age"]; 

    var table = d3.select("#container").append("table"), 
     thead = table.append("thead"), 
     tbody = table.append("tbody"); 

    // append the header row 
    thead.append("tr") 
     .selectAll("th") 
     .data(columns) 
     .enter() 
     .append("th") 
      .text(function(column) { return column; }); 

    // create a row for each object in the data 
    var rows = tbody.selectAll("tr") 
     .data(data) 
     .enter() 
     .append("tr"); 

    // create a cell in each row for each column 
    var cells = rows.selectAll("td") 
     .data(function(row) { 
      return columns.map(function(column) { 
       return {column: column, value: row[column]}; 
      }); 
     }) 
     .enter() 
     .append("td") 
      .text(function(d) { return d.value; }); 
}); 

working exampleをチェックしてください。そのコードをコピーする場合は、tabulate()関数を更新して、既存のテーブルまたは別のコンテナ("#container"ではなく)を選択する必要があります。

d3.csv("path/to/data.csv", function(data) { 
    tabulate(data, ["name", "age"]); 
}); 
+0

非常に興味深い。ご助力ありがとうございます。 –

+3

偉大な答え - ありがとう! –

+0

この例題は現時点では動作しません。td要素は空です。このSOの質問http:// stackoverflowをご覧ください。com/questions/23399462/d3-table-example-yields-empty-td-tags –

4

@Shawn_allenが提案した回答にバグがあります。ただ楽しんで、この1

return {column: column, value: row[columns.indexOf(column)]}; 

によってコード

return {column: column, value: row[column]}; 

の次の行を変更し、それを解決するために

0

多くの場合、定期的にデータテーブルを更新する必要があります。ここで私はデータを持つテーブルを移入方法は次のとおりです。

HTML:

<table id="t1"> 
    <thead> 
     <tr><th>Name<th>Age 
    </thead> 
</table> 

はJavaScript:

function tabulate(data, columns) { 
    var table = d3.select("#t1"); 
    table.select('tbody').remove(); // remove any existing data 
    var tbody = table.append('tbody'); 
    data.forEach(function(row) { 
    var tr = tbody.append('tr'); 
    columns.forEach(function(column) { 
     tr.append('td').text(row[column]); 
    }); 
    }); 
    return table; 
} 

注:

  • 私はむしろ、HTMLでテーブルヘッダを置くのが好きJavaScriptからそれらを生成するよりも。
  • 私はテーブルの行とセルにデータを添付しませんでした(@Shawnはその答えに表示されます)。なぜなら、その必要はないからです。だからコードは簡単です。

fiddle

0

私は、新しい答えとしてこれを追加することで申し訳ないが、私はコメントとしてそれを追加するための十分なポイントを持っていません。 @Shawn_Allenのコードの終わりまでちょっと微調整。私はこれも動作すると信じています。

//create a cell in each row for each column 
var cells = rows.selectAll("td") 
    .data(function(row) { 
     return columns.map(function(column) { 
      return row[column]; 
     }); 
    }) 
    .enter() 
    .append("td") 
     .text(function(d) { return d; }); 

});

column、valueを使用してJSONを作成する必要はありませんでした。

関連する問題