attribute d: Expected number, "MNaN、NaNLNaN、NaNL…". "D3 错误-6ren"> attribute d: Expected number, "MNaN、NaNLNaN、NaNL…". "D3 错误-我正在从 Quandl 的 API 导入一些数据,以制作多年来布伦特原油价格的图表。我正在使用 Angular 发出的 HTTP 请求提供数据。不知何故,所提供的数据没有被读取为数字,因为我收到以下错-6ren">
gpt4 book ai didi

javascript - "Error: attribute d: Expected number, "MNaN、NaNLNaN、NaNL…". "D3 错误

转载 作者:行者123 更新时间:2023-11-29 23:42:42 24 4
gpt4 key购买 nike

我正在从 Quandl 的 API 导入一些数据,以制作多年来布伦特原油价格的图表。我正在使用 Angular 发出的 HTTP 请求提供数据。不知何故,所提供的数据没有被读取为数字,因为我收到以下错误:

Error: attribute d: Expected number, "MNaN,NaNLNaN,NaNL…".

app.service('oilService', function($http) {
delete $http.defaults.headers.common['X-Requested-With'];
this.getData = function() {
var URL = "https://www.quandl.com/api/v1/datasets/CHRIS/ICE_B1.json";
return $http({
method: 'GET',
url: URL
})
}
})

.directive('oilGraph', function() {
return {
scope: {},
controller: function(oilService) {
var width = 200;
var height = 100;

var parseTime = d3.timeParse("%y-%m-%d");

var x = d3.scaleTime().range([0, width]);
var y = d3.scaleLinear().range([height, 0]);

var valueline = d3.line()
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.settle); });
var svg = d3.select("#oilgraph").append("svg")
.attr("width", width)
.attr("height", height);

oilService.getData()
.then(function(data) {

var mapped_data = data.data.data.map(function(d) {
return {
date: parseTime(d[0]),
settle: d[4]
};
})

x.domain(d3.extent(data, function(d) { return d.date; }));
y.domain([0, d3.max(data, function(d) { return d.settle; })]);

svg.append("path")
.data([mapped_data])
.attr("class", "line")
.attr("d", valueline);

svg.append("g")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x));

svg.append("g")
.call(d3.axisLeft(y));
})
})
}
}
})

最佳答案

您的问题只是错误的说明符。因为你的日期有世纪......

"2017-06-16"

...您应该使用 %Y 而不是 %y。根据API :

%Y - year with century as a decimal number.

因此,这应该是您的说明符:

var parseTime = d3.timeParse("%Y-%m-%d");

除此之外,您必须在比例尺中使用mapped_data,而不是data

这是您的代码,其中包含更改:

var width = 500;
var height = 200;

var parseTime = d3.timeParse("%Y-%m-%d");

var x = d3.scaleTime().range([0, width]);
var y = d3.scaleLinear().range([height, 0]);

var valueline = d3.line()
.x(function(d) {
return x(d.date);
})
.y(function(d) {
return y(d.settle);
});

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);

d3.json("https://www.quandl.com/api/v1/datasets/CHRIS/ICE_B1.json", function(data) {

var mapped_data = data.data.map(function(d) {
return {
date: parseTime(d[0]),
settle: d[4]
};
});

x.domain(d3.extent(mapped_data, function(d) {
return d.date;
}));
y.domain([0, d3.max(mapped_data, function(d) {
return d.settle;
})]);

svg.append("path")
.data([mapped_data])
.attr("class", "line")
.attr("d", valueline);

svg.append("g")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x));

svg.append("g")
.call(d3.axisLeft(y));

})
path {
fill: none;
stroke: black;
}
<script src="https://d3js.org/d3.v4.min.js"></script>

关于javascript - "Error: <path> attribute d: Expected number, "MNaN、NaNLNaN、NaNL…". "D3 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44846158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com