【问题标题】:Find max value in CSV column using d3.max使用 d3.max 在 CSV 列中查找最大值
【发布时间】:2013-02-14 01:34:41
【问题描述】:

在 D3.js 中使用 data().enter().append() 后,只需使用 d.valuename 即可检索数据集中的各个列/值。但我想在 CSV 列中找到线性比例的最大值。由于比例之前没有任何数据调用,我真的不确定如何指定从中找到最大值的正确列。

这是我失败的尝试。我用什么替换d.column1

d3.csv("file.csv", function (data) {

var x = d3.scale.linear()
    .domain([0, d3.max(d.column1)])
    .range([0, 960]);

编辑:

好的,通过查看a similar example,我更进一步了。我不明白为什么我的代码现在不起作用。

 d3.csv("file.csv", function (data) {

 data.forEach(function(d) {
    d.column1 = +d.column1;
 });

 var max = d3.max(data, function(d) { return d.column1; });

 var x = d3.scale.linear()
     .domain([0, max])
     .range([0, 960]);

编辑 #2:

如果问题源于数据本身,这里有一个 sn-p。我尝试删除所有引号,并保留除顶行之外的所有引号,但没有任何效果。

"product", "price"
"bread",20
"meat",100
"meat, sausage",200

编辑#3:

好的,我保证,最后一次编辑。但要绝对清楚;我使用 x-scale 来确定条形图中条形的宽度:.attr("width", x) 并且比例返回 NaN。

【问题讨论】:

  • 您已编辑示例接缝以正确确定最大值。例如,以下 jsfiddle 显示它工作正常:jsfiddle.net/activescott/HCDJu 究竟是什么不工作?
  • 可能和数据源有关。请参阅我的最新编辑以获取我的 CSV 文件中的数据示例。你怎么看?
  • 问题是我的条的宽度返回 NaN。如果我跳过比例并让宽度成为数据的函数,比如.attr("width", function (d) {return +d.column1}),它就像一个魅力。但是d3.max 不愿意将行视为数字。

标签: javascript d3.js


【解决方案1】:

解释为什么您的代码有效:

data.forEach(function(d) {
  d.column1 = +d.column1;
});

上述语句将所有 column1 值转换为整数(d.column1 前面的 + 号将类型强制转换为数字)。

一旦您的值都是数字,d3 现在可以将它们作为数字而不是字符串进行比较。这样 10 将大于 9。如果它们是字符串,“9”将大于“10”。

var max = d3.max(data, function(d) { return d.column1; });

上面的行只取数据数组的最大值。由于您的数据数组由对象组成,因此 d3 无法知道如何将一个对象与另一个对象进行比较。第二个参数是一个函数,它给 d3 一个值给每个对象,以便 d3 可以比较每个对象。在您的情况下,您告诉 d3 使用 column1 来确定最大值。这类似于比较器功能。

【讨论】:

  • 拍摄误读了您的编辑,并认为您问为什么您的代码有效。不是您的代码无法正常工作的原因
  • 好吧,至少我学到了一些东西,所以谢谢:) jsfiddle.net/activescott/HCDJu
  • 感谢 benr,如果我在上面的编辑中不清楚,很抱歉。奇怪的是,代码现在不起作用,对吧?我从我的 CSV 文件中发布了一个 sn-p,以防出现问题。
【解决方案2】:

我才意识到问题出在哪里。难怪我们不能一起解决这个问题。上面的所有代码都很好。只是当我调用 x-scale 来确定我的条形的宽度时,我没有指定数据中的哪一列将输入到刻度中。我有

.attr("width", x)

但现在我将该行更改为:

.attr("width", function(d) { return x(d.column1); })

感谢您的帮助和耐心。

【讨论】:

    猜你喜欢
    • 2015-07-27
    • 2018-09-11
    • 2015-05-01
    • 2015-02-18
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    相关资源
    最近更新 更多