我在解析csv文件中的日期时遇到问题。 一直在寻找网上和书籍和测试的时间,而没有找到解决方案。
也许有人可以提供帮助。
该代码适用于仅解析数字来读取文件。但是在解析带有日期的文件时,我收到以下错误消息,指出无法识别日期格式:
Problem parsing d="MNaN,268.5466377440347LNaN,117.78741865509761LNaN ...
该文件如下所示:
date,value
11-11-13,582
12-11-13,860
13-11-13,940
代码:(js)
function myFunction() {
d3.csv('data/Date.csv', draw);
}
function draw(data) {
"use strict";
var margin = 50,
width = 800 - margin,
height = 350 - margin;
var parseDate = d3.time.format("%d-%m-%y").parse;
var x_scale = d3.time.scale()
.domain(d3.extent(data,function(d){return d.date}))
.range([margin, width]);
var y_scale = d3.scale.linear()
.domain(d3.extent(data,function(d){return d.value}))
.range([height, margin]);
var x_axis = d3.svg.axis()
.scale(x_scale)
.orient("bottom");
var y_axis = d3.svg.axis()
.scale(y_scale)
.orient("left");
var line = d3.svg.line()
.x(function(d){return x_scale(d.date);})
.y(function(d){return y_scale(d.value);});
data.forEach(function(d) {
d.date = parseDate(d.date);
d.value = +d.value;
});
d3.select("body")
.append("svg")
.attr("width", width+margin)
.attr("height", height+margin)
.append('g')
.attr("transform","translate(" + margin + "," + margin + ")");
d3.select('svg')
.append('path')
.datum(data)
.attr ("class","line")
.attr('d', line);
d3.select("svg")
.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(x_axis);
d3.select("svg")
.append("g")
.attr("class", "y axis")
.attr("transform", "translate(" + margin + ",0)")
.call(y_axis);
}
<body>
<button onclick="myFunction()">Show Graph</button>
</body>
答案 0 :(得分:3)
您应该移动以下代码
data.forEach(function(d) {
console.log(d.date);
console.log(format.parse(d.date));
d.date = format.parse(d.date);
d.value = +d.value;
});
在
之后var format = d3.time.format("%d-%m-%y");
您的原始代码在解析日期之前使用了解析日期:)
答案 1 :(得分:2)
在实际解析日期之前,您正在设置x比例的域,即比例将期望字符串而不是日期作为输入。您需要移动代码
data.forEach(function(d) {
d.date = parseDate(d.date);
d.value = +d.value;
});
前
var x_scale = d3.time.scale()
.domain(d3.extent(data,function(d){return d.date}))
.range([margin, width]);
通常,您应该在处理函数的开头处进行任何处理。