d3选择csv文件的特定行

时间:2015-07-16 13:09:43

标签: javascript csv d3.js

我正在尝试使用库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中发现了完全与我的&lt; =条件完全不对应的随机行。

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

知道发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

使用d3.time.format()时需要注意。在javascript中,当创建新日期(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会解释完全不同的东西。你能发贴整个代码吗?你在哪里注意到这个错误?或者你是怎么注意到的?