【问题标题】:d3 select specific lines of csv filed3 选择 csv 文件的特定行
【发布时间】:2015-07-16 13:09:43
【问题描述】:

我正在尝试使用库 d3 根据日期从 csv 文件中呈现图表。

我可以轻松地显示整个 csv 文件的图表,但我希望(使用下面的示例)仅显示 6 月以来的日期数据。

csv文件如下:

date, close
15/06/15,200
15/06/15,250
10/06/15,300
05/06/15,500
25/05/15,200
20/05/15,100

好的,这样解析日期就可以了,我现在正在将日期与匹配的格式进行比较。不过,有些事情是没有意义的。

d3.csv("txt.csv", function(error, data) {
data2 = data.filter(function(d) { return d.date <= timeFormat(parseDate("10/06/15")) });

data2.forEach(function(d) {
            d.date = timeFormat(parseDate(d.date));
            d.close = +d.close;
            });

var     timeFormat = d3.time.format("%d/%m/%y");
var     parseDate = d3.time.format("%d/%m/%Y").parse;

当我 console.log(data2);我确实得到了一些数组,这意味着它正在找到一些行,问题是它从 csv 中找到完全不符合我的

P.S.:为清楚起见,我简化了 csv。我的真实情况应该只在 csv 末尾拾取 2 行,但它从 csv 的其余部分获取数百行(但不是所有行!!!)。

知道发生了什么吗?

【问题讨论】:

  • d3 尺度用于将域输入转换为范围输出。所以不要使用那些:-)。相反,如果只需要一部分数据,则需要对数据进行过滤。
  • 过滤数据,但是我可能会保留加载的数据完整并从过滤操作中创建一个新数组,例如trimmedData = data.filter(...) 这将允许您稍后更改正在查看的数据或更轻松地创建数据的多个视图
  • 这正是我想做的,Tom P,非常感谢。最终我想将上个月和本月的数据叠加在同一张图上,所以我认为我现在非常接近了。

标签: javascript csv d3.js


【解决方案1】:

使用 d3.time.format() 时有一个警告。在 javascript 中,当创建一个新的 Date(yyyy, mm, dd) 时,月份的数字可以从 0 到 11。它们从零开始。在 d3.time.format() 中,月份不是从零开始的(从 1 到 12)。

将 15/06/15 解释为 2015-06-14T23:00:00.000Z...

这有点奇怪。当我执行以下操作时,d3 格式(就像你定义的那样)在 15/07/15 为我返回:

var someDate = new Date(2015,06,15);
var var timeFormat = d3.time.format("%d/%m/%y");
console.log(timeFormat(someDate));

所以我实际上得到了我期望得到的东西。它没有打印 2015-06-15T00:00:00 或类似的东西......

还有一件事是关于 javascript 中的日期。你可以阅读更多关于它的信息here。但是,它有点老了,它并不能解释为什么 d3.time.format 会解释完全不同的东西。您能否发布整个代码?您在哪里注意到错误?或者你是怎么注意到的?

【讨论】:

    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2018-09-10
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多