创建链接到 csv 文件的表

发布于 2025-01-05 04:23:21 字数 128 浏览 1 评论 0原文

我正在尝试使用 d3 创建一个链接到 *.csv 文件的表格,但我得到的只是一个空白网页。 即使以克里米亚为例,我也会得到一个空白页。
如果有人指导或展示一个可行的例子或对我做错的事情提出建议,我将不胜感激。

I am trying to create a table linked to a *.csv file using d3, but all I get is a blank webpage.
Even with the example Crimea I get a blank page.
I would be grateful to be directed or shown a working example or a suggestion of what I am doing wrong.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

巴黎夜雨 2025-01-12 04:23:21

如果您询问如何从 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; });
});

查看工作示例。如果您要复制该代码,则需要更新 tabulate() 函数,以便它选择现有表或不同的容器(而不是 "#container"),然后您可以将其与 CSV 数据一起使用,如下所示:

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

If you're asking about creating an HTML table from CSV data, this is what you want:

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; });
});

Check out the working example. If you're copying that code, you'll need to update the tabulate() function so that it either selects an existing table or a different container (rather than "#container"), then you can use it with CSV data like so:

d3.csv("path/to/data.csv", function(data) {
  tabulate(data, ["name", "age"]);
});
暗恋未遂 2025-01-12 04:23:21

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

要解决这个问题,只需更改以下代码行

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

即可

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

享受!

There is a bug in the answer proposed by @Shawn_allen.

To solve it just change the following line of code

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

by this one

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

Enjoy !

行雁书 2025-01-12 04:23:21

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

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 在他的答案中显示的那样),因为我不需要这样做。所以代码比较简单。

小提琴

Often, I need to refresh a table of data periodically. Here's how I populate a table with data:

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;
}

Notes:

  • I like to put table headers in the HTML, rather than generate them from JavaScript.
  • I didn't attach the data to the table rows and cells (like @Shawn shows in his answer), because I don't have a need for that. So the code is simpler.

fiddle

醉生梦死 2025-01-12 04:23:21

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

I'm sorry to add this in as a new answer but I don't have enough points to add it in as a comment. Just a slight tweak to the end of the code of @Shawn_Allen. I believe that this works too.

//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; });

});

There was no need to create that JSON with column, value.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文