7

我有生成的 csv 文件,我正在尝试将它们加载到 d3 中以绘制它们。列名是基于数据的,所以我基本上无法提前知道它们。通过测试,如果我知道列的名称,我可以加载这些数据并很好地绘制它......但我不知道我的用例。

我如何在 d3 中处理这个问题?我似乎无法在网上或文档中找到任何可以帮助/参考的内容。当我从 d3.csv 登录到控制台数据 [0] 时,我可以看到有两列以及为它们读取的值,但我不知道如何在不知道的情况下任意引用数据的第 1 列或第 2 列列名提前。一般来说,我想避免这种情况,知道我的时间戳在第 1 列,我的数据在第 2 列,如果这有意义的话。

编辑,我的答案使用 d3.entries 来帮助了解未知列的名称,然后继续访问具有该索引的所有对象:

d3.csv("export.csv", function(error, data) {
    var mappedArray = d3.entries(data[0]);
    var valueKey = mappedArray[1].key;
    data.forEach(function(d) {
        ...
        d.value = d[valueKey];
    }
}
4

4 回答 4

3

您可以使用该d3.entries()函数将关联数组转换为另一个数组,该数组包含一个关联数组,每个键值对都带有key和键。value

于 2013-02-27T20:34:47.410 回答
1

您可以使用 D3 v3values()方法获取键(列名),如下所示:

const [dataValues] = d3.values(data)
const keys = Object.keys(dataValues)
console.log(keys);
于 2016-07-29T20:45:38.273 回答
1

我很高兴你明白了,@cdietschrun。

D3 的第 4 版允许您更简单地执行此操作。它引入了一个属性,它创建了一个列标题数组(即数据集的“键”)。

因此,不要使用您的代码:

var mappedArray = d3.entries(data[0]),
    valueKey = mappedArray[1].key;

... 您可以使用:

var valueKey = data.columns;
于 2017-10-11T07:06:29.677 回答
-1

我使用 d3.entries() 如下:

for(i=0;i<data.length;i++)
{
    var temp = d3.entries(data[i]);
    for(j=0;j<temp.length;j++)
    if(temp[j].key == selectedx)
    myarray.push(temp[j].value);
}

希望这可以帮助 :)

于 2015-11-05T23:58:18.617 回答