【问题标题】:I can't get the column max values from my csv file.(Javascript D3)我无法从我的 csv 文件中获取列最大值。(Javascript D3)
【发布时间】:2019-10-27 05:04:06
【问题描述】:

所以我正在尝试制作一个从 2 个下拉菜单中获取输入的散点图。做出选择后,将选择 csv 文件中的 2 列。

但是,最大值因选择而异,因此我需要程序根据用户做出的不同选择进行更改。所以在将要负责它的代码的 sn-p 中,我觉得语法是有道理的。最终结果是我尝试将结果存储在 2 个单独的变量中并打印到控制台,结果显示为“未定义”,但没有错误。所以我不确定问题出在哪里。如果我对任何单一选择的列和轴进行硬编码,那么这些点就没有问题。但是因为我是动态设置的,所以我猜没有任何值被捕获。任何帮助表示赞赏。

d3.csv("datafile.csv",function(data){
var xMx = d3.max(data,function(d) { return d.xvalue; } );
var yMx = d3.max(data,function(d) { return d.yvalue; } );
console.log(xMx);[enter image description here][1]
//x-axis
var x = d3.scaleLinear().domain([0,xMx])

版本是:4.13.0 我试过包含 csv 文件。https://i.stack.imgur.com/kq8Aq.jpg

【问题讨论】:

  • 请分享您的 CSV,仅包含标题和一两行。还有,什么是 D3 版本?
  • 您的 CSV 不包含 xvalueyvalue。你期望那些来自哪里? data 是一个对象数组,包含与 CSV 的列名匹配的属性...
  • 我知道文件中不存在的变量,我使用这些值的原因是因为这些是主要方法中的参数,将实际列名放入其中。因为我不能明确选择要在哪个列中搜索最大值,我在尝试直接获取输入而不必诉诸 if 语句时遇到问题。如果我这样做了,那将是一堆“if”语句的组合,它们将负责每列的不同缩放轴,并且变得更加复杂。
  • 那么,xvalueyvalue 持有您感兴趣的列的实际名称,对吗?在这种情况下,您需要所谓的括号表示法,即d[xvalue]d[<value],而不是点表示法(d.xvalue)来访问这些名称的属性。相关:"Fetch value using input from user in D3".

标签: javascript csv d3.js


【解决方案1】:

d3.csv() 不会自动将字符串转换为数字。我建议读取数据,使用d3.csv()row 参数正确处理数据,然后才使用d3.max() 的访问器找到最大值。

由于您使用的是 D3 4,所以它类似于

d3.csv("datafile.csv", r => {
    // this function returns a new object for each row.
    // the + is common shorthand for parseFloat()

    return {
        xvalue: +r.xvalue,
        yvalue: +r.yvalue
    };
}, data => {
    let xMx = d3.max(data, d => d.xvalue);
    let yMx = d3.max(data, d => d.yvalue);
    console.log(xMx, yMx);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-25
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多