D3使用对象数组从键中获取值

D3 Getting values from keys using array of objects

本文关键字:获取 数组 对象 D3      更新时间:2023-09-26

所以我读了一个关于国家GDP的csv文件,我过滤掉了不需要的列和国家。现在我想知道如何从这个对象数组中提取值,并使用它们为多系列折线图创建x轴和y轴。这是我的代码

    function country(element) {
    return element.CountryName == "Brazil" ||
            element.CountryName == "China" ||
            element.CountryName == "Russian Federation" ||
            element.CountryName == "United Kingdom" ||
            element.CountryName == "United States" ||
            element.CountryName == "Germany";
}
d3.csv("GDP.csv", function(d) {
    return {
        CountryName : d["Country Name"],
        Indicator : d["Indicator Name"],
        y2004 : d["2004"],
        y2005 : d["2005"],
        y2006 : d["2006"],
        y2007 : d["2007"],
        y2008 : d["2008"],
        y2009 : d["2009"],
        y2010 : d["2010"],
        y2011 : d["2011"],
        y2012 : d["2012"]
    };
},
    function(error, rows) {
    //document.write(rows);
    dataset = rows;
    var filtered = dataset.filter(country);
    console.log(filtered);
    //Code to create axes and map keys
});

现在我有一个包含6个对象的数组,每个对象在特定命名的键处具有值。我见过的例子通常是从文件的头行读取键值,但我该如何处理这个尝试?

x轴表示2004-2012年,它们是列名和键值。y轴是这些年份的数值范围。生成的6行分别代表每个国家。

我要遵循的例子是http://bl.ocks.org/mbostock/3884955

我需要解析日期吗?我不这么认为,因为我只是在处理年份数字,它们是键值,而不是键值。谢谢。

我将收集我的数据,以便每个点有4个键:

{country:"Germany", indicator:"...",  year:2004, value:55}

而不是每年都有密钥。只需对csv调用进行后处理。

当您这样做时,确定最小/最大年份和最小/最大值。

接下来,使用域[minYear, maxYear]构建年刻度(x轴)。接下来,使用[minValue, maxValue]域为y轴构建一个值刻度。

D3想要使用具有相同键集的对象数组。如果必须这样做,可以在预处理阶段将数据修改为如下格式:

[
    { key: value, key2: value },
    { key: value, key2: value },
    { key: value, key2: value },
    { key: value, key2: value },
    { key: value, key2: value }
]

否则你将会有一个非常糟糕的时间与D3,因为大多数的函数式编程功能的工具包将不会为你工作。