我开始使用d3。 我有两个数据集,一个在tsv中,另一个在json中,具有相同的内容。
TSV:
x y
1 5
5 15
99 105
101 104
我的tsv代码:
<script>
d3.tsv("data/data.tsv", function(error, data) {
console.log(d3.max(data, function(d) { return d.x; }));
console.log(d3.max(data, function(d) { return d.y; }));
});
</script>
在这种情况下,d3.max返回x = 99,y = 5
当我用硬编码的json结构做同样的事情时:
var data = [
{ "x" : 1, "y" : 5 },
{ "x" : 5, "y" : 15 },
{ "x" : 99, "y" : 105 },
{ "x" : 101, "y" : 104 },
];
console.log(d3.max(data, function(d) { return d.x; }));
console.log(d3.max(data, function(d) { return d.y; }));
它返回正确的值,x = 101,y = 105。
那么我做错了什么? 我检查过,tsv文件只包含一个标签,值在
之间答案 0 :(得分:1)
使用
d3.tsv.parse(string[, accessor])
答案 1 :(得分:1)
正如其他人在评论中所说,您需要将x和y转换为数值。为此,传递accessor函数,该函数将对每一行进行操作以强制执行值:
试试这个:
d3.tsv("data/data.tsv",
function(d){
return {
x: +d.x, //<-- convert to float from string
y: +d.y
}
},
function(error, data) {
console.log(d3.max(data, function(d) { return d.x; }));
console.log(d3.max(data, function(d) { return d.y; }));
}
);