【问题标题】:Importing csv, using D3.js and Javascript for a Line Graph导入 csv,使用 D3.js 和 Javascript 制作折线图
【发布时间】:2017-08-19 12:10:03
【问题描述】:

这就是我导入数据以创建折线图的方式。 它工作正常,但我希望它更普遍地工作。 有没有办法替换 d.v1 = +d.Time 等行,这样它们就不必使用列的确切名称(时间、温度 2、温度 3)?

d3.csv("data.csv", function(error, data){
data.forEach(function(d){
d.v1 = +d.Time;
d.v2 = +d.Temp2;
d.v3 = +d.Temp3;
});

我有这段代码,我可以在其中读取列的名称来自动标记轴。

d3.csv('Messdaten.csv', function(data){  
var headerNames = d3.keys(data[0])      
     xAxisName = headerNames[0];      
     yAxisName1 = headerNames[1];
     yAxisName2 = headerNames[2];
     yAxisName3 = headerNames[3];
});

但我无法使用它来代替列的确切名称来创建图表。

【问题讨论】:

    标签: javascript csv d3.js


    【解决方案1】:

    现在你的问题还不是很清楚。但是,在我看来,您似乎在问以下问题:“如何在不知道 CSV 中标题名称的情况下将字符串转换为数字?”

    既然如此,您可以使用行函数中的第三个参数(传统上命名为 columns)来遍历所有标题,即使 CSV 的结构未知。

    首先,让我们证明事实上我们有字符串作为默认原语:

    var csv = `foo,bar,baz
    12,32,44
    16,13,64
    16,77,42`;
    
    var data = d3.csvParse(csv)
    
    console.log(data)
    <script src="https://d3js.org/d3.v4.min.js"></script>

    如您所见,foobarbaz 的所有值都是字符串,而不是数字。

    现在让我们使用通用代码转换它们。我们基本上会获取标题的名称,并使用 for 循环遍历每个属性:

    function(d, i, columns) {
        for (var i = 0; i < columns.length; i++) {
            d[columns[i]] = +d[columns[i]];
        }
        return d;
    }
    

    这里是演示:

    var csv = `foo,bar,baz
    12,32,44
    16,13,64
    16,77,42`;
    
    var data = d3.csvParse(csv, function(d, i, columns) {
      for (var i = 0; i < columns.length; i++) {
        d[columns[i]] = +d[columns[i]];
      }
      return d;
    })
    
    console.log(data)
    &lt;script src="https://d3js.org/d3.v4.min.js"&gt;&lt;/script&gt;

    如您所见,现在我们有了数字,而且我们没有使用任何标题名称(foobarbaz)。

    【讨论】:

    • 感谢您的回答!!我认为您的解决方案正是我正在寻找的,但我在使用它时遇到了一些问题。我没有设法加载外部 csv 文件。我总是得到长度为 0 的空数组。像下面这样插入 csv 文件的名称是正确的方法吗? var data = d3.csvParse("Numbers.csv", function(d, i, columns) { for (var i = 0; ... 在 csv 文件中,数据必须像这样格式化,对吧? a,b,c,d (new line) 1,2,3,4 (new line) 5,6,7,8
    • 不,你必须使用d3.csv,就像你在问题中所做的那样,并将行函数放在 URL 和回调之间。
    • 好的,最后一个问题。我能够导入数据并将它们保存到数组中。但是我怎样才能访问其中的一列呢?之前我对每一列都有变量 d.v1, d.v2 ,但现在我不知道该怎么做。非常感谢@Gerardo Furtado
    • 既然这是另一个问题,请发布另一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多