在d3.js

时间:2017-03-03 20:35:05

标签: javascript d3.js

这看起来很简单,但我似乎无法弄明白。我的大多数背景都是Python和R,这非常简单,但我无法弄清楚如何在D3中完成它。

如何在列中找到最大值?

例如,假设我有一个csv:

country,gdp
USA,55
Japan,22
Kuwait,10

我用

加载到D3
    function getData() {
        d3.csv("gdp.csv", function(d) {
            gdpData = d;
        });   
    } 

现在该怎么做?我只想返回值55gdp列中的最高值)。

在Python中,这只是np.max(gdpData['gdp'])或R max(gdpData$gdp)

我使用Math.max(gdpData.gdp)尝试了Math.max(gdpData['gdp']).keys()以及其他各种事情,但无济于事。我想我只是在误解D3如何代表数据表。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

加载数据后,您可以执行以下操作以获取最大值:

var max = d3.max(gdpData, function(d) { return d.gdp; } );

This link可能会帮助您了解您可以通过d3对阵列执行的不同操作。

答案 1 :(得分:1)

(这只是sparta's answer

的附录

这里有两个初始问题:

  1. 我不知道您的其余代码,但在我看来,您正在尝试将数据数组分配给名为gdpData的全局。这不起作用,因为d3.csv是异步的。除此之外,d3.csv不会返回任何内容,因此您也无法将其分配给变量。
  2. 您使用d作为回调函数中的第一个参数。不这样做,它引入了不必要的混淆,因为d在惯用D3中被正常用作大多数匿名函数中的基准参数。使用datadatasetmyData或其他类似内容。
  3. 所有人都说,将你的功能改为:

    d3.csv("gdp.csv", function(data) {
        //code here
    });
    

    因此,在第一步之后,让我们看看d3.csv做了什么:

    鉴于您的CSV,d3.csv会创建一个对象数组,其中属性名称为CSV标头,属性值为以下行。在您的情况下,这是数据数组(检查控制台):

    var data = d3.csvParse(d3.select("#csv").text());
    console.log(data);
    pre{
      display:none;
    }
    <script src="https://d3js.org/d3.v4.min.js"></script>
    <pre id="csv">country,gdp
    USA,55
    Japan,22
    Kuwait,10</pre>

    (注意:我正在使用pre元素加载数据,因为我无法在Stack片段中上传CSV)

    然后,要获得最大值,只需使用sparta答案中的代码d3.max,其中:

      

    使用自然顺序返回给定数组中的最大值。如果数组为空,则返回undefined。可以指定可选的访问器函数,这相当于在计算最大值之前调用array.map(访问器)。

    所以,既然你有一个对象数组,你需要:

    var max = d3.max(data, d => d.gdp);
    

    以下是:

    var max = d3.max(data.map(d => d.gdp));
    

    data.map返回此数组:

    ["55", "22", "10"]
    

    并且d3.max在返回的数组中找到最高值。请注意d3.csv将CSV值解析为字符串(如上图所示),而不是数字,即使这些值最初是数字。

    查看演示:

    var data = d3.csvParse(d3.select("#csv").text());
    var max = d3.max(data, d => d.gdp);
    console.log(max);
    pre{
      display:none;
    }
    <script src="https://d3js.org/d3.v4.min.js"></script>
    <pre id="csv">country,gdp
    USA,55
    Japan,22
    Kuwait,10</pre>