【问题标题】:Creating a table linked to a csv file创建链接到 csv 文件的表
【发布时间】:2012-03-05 08:01:37
【问题描述】:

我正在尝试使用 d3 创建一个链接到 *.csv 文件的表,但我得到的只是一个空白网页。 即使以克里米亚为例,我也会得到一个空白页。
如果有人指导或向我展示一个工作示例或关于我做错了什么的建议,我将不胜感激。

【问题讨论】:

标签: javascript d3.js html-table


【解决方案1】:

如果您想从 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"),然后您可以将其与 CSV 数据一起使用,如下所示:

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

【讨论】:

  • 非常有趣。非常感谢您的帮助。
  • 这个例子目前不适合我,td 元素是空的。你能看看这个问题stackoverflow.com/questions/23399462/…
  • 谢谢肖恩,你用这个答案把我名单上的一项任务删掉了。
  • @shawn-allen 可用于生成表格以计算包含 1 个月数据的 CSV 的每日最小值/最大值和平均值
【解决方案2】:

@Shawn_allen 提出的答案中有一个错误。

要解决它,只需更改以下代码行

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

这个

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

享受吧!

【讨论】:

    【解决方案3】:

    通常,我需要定期刷新数据表。以下是我使用数据填充表格的方法:

    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

    【讨论】:

      【解决方案4】:

      很抱歉将此添加为新答案,但我没有足够的积分将其添加为评论。对@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; });
      

      });

      没有必要创建带有列、值的 JSON。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-29
        • 1970-01-01
        • 2018-07-16
        • 2015-05-10
        • 2020-08-05
        • 1970-01-01
        • 2017-09-04
        • 2014-11-03
        相关资源
        最近更新 更多