gpt4 book ai didi

javascript - d3.js scaleTime 返回未定义

转载 作者:行者123 更新时间:2023-11-29 20:33:53 25 4
gpt4 key购买 nike

我正在尝试使用 d3.js 显示一个使用 json 对象(字符串)的图形,该对象是从 aspx 网页代码背后的服务器中提取的。过去几天我一直在进行故障排除,但遇到了困难。

我得到:

d3.v5.min.js:2 Error: <path> attribute d: Expected number, "MNaN,189.61165048…".

当我记录 dttm 和 xScale dttm 时,我得到了这个(这只是一个例子,不是整个结果):

dttm: 2019-07-29 23:59:53 xScale: undefined

所以我很清楚,当我在 line 函数中调用 xScale(d.dttm) 时,它返回 null,这可以解释我遇到的问题。

如能就我如何解决此问题提供任何帮助,我们将不胜感激!

var jsonObject = <%=json%>;

var parseTime = d3.timeParse("%Y-%m-%dT%H:%M:%SZ");
var formatTime = d3.timeFormat("%Y-%m-%d %H:%M:%S");

jsonObject.forEach(function (d) {
d.dttm = formatTime(parseTime(d.dttm));
d.perc = +d.perc;
});

var dataNest = d3.nest()
.key(function (d) { return d.server_name; })
.entries(jsonObject);

var margin = { top: 30, right: 20, bottom: 30, left: 50 },
width = 600 - margin.left - margin.right,
height = 270 - margin.top - margin.bottom;

var xScale = d3.scaleTime()
.domain(d3.extent(jsonObject, function (d) { return d.dttm; }))
.range([0, width]);

var yScale = d3.scaleLinear()
.domain([0, 103])
.range([height, 0]);

var colorScale = d3.scaleOrdinal(d3.schemeCategory10);

var xAxis = d3.axisBottom().scale(xScale).ticks(5);
var yAxis = d3.axisLeft().scale(yScale).ticks(5);

var line = d3.line()
.x(function (d) {
console.log("dttm: " + d.dttm + " xScale: " + xScale(d.dttm));
return xScale(d.dttm);
})
.y(function (d) { return yScale(d.perc); });

var svg = d3.select("#dataviz")
.append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");

d3.data = jsonObject;

dataNest.forEach(function (d, i) {
console.log("index: " + i + " server: " + d.key + " color: " + colorScale(i) + " the object is below...");
console.log(d);
svg.append("path")
.attr("class", "line")
.attr("d", line(d.values))
.style("stroke", colorScale(i))
});

编辑:以下是 Console.log() 的一些有用结果

jsonObject.forEach(function (d) {
console.log(parseTime(d.dttm));
d.dttm = formatTime(parseTime(d.dttm));
d.perc = +d.perc;
});

返回(只是几个例子,数据集相当大:

Mon Jul 29 2019 23:58:43 GMT-0600 (Mountain Daylight Time)
Mon Jul 29 2019 23:58:46 GMT-0600 (Mountain Daylight Time)
Mon Jul 29 2019 23:58:48 GMT-0600 (Mountain Daylight Time)
Mon Jul 29 2019 23:59:08 GMT-0600 (Mountain Daylight Time)
jsonObject.forEach(function (d) {
d.dttm = formatTime(parseTime(d.dttm));
d.perc = +d.perc;
});

console.log(jsonObject);

返回(只是一个样本,数据集很大):https://imgur.com/flOGpsZ

这是 jsonObject 的 JSON.stringify

[{"server_name":"XXXXXXX","dttm":"2019-07-29 00:00:03","perc":3},{"server_name":"XXXXXXX","dttm":"2019-07-29 00:00:04","perc":3},{"server_name":"XXXXXXX","dttm":"2019-07-29 00:00:06","perc":18},{"server_name":"XXXXXXX","dttm":"2019-07-29 00:00:09","perc":10},{"server_name":"XXXXXXX","dttm":"2019-07-29 00:00:13","perc":5},{"server_name":"XXXXXXX","dttm":"2019-07-29 00:00:14","perc":5},{"server_name":"XXXXXXX","dttm":"2019-07-29 00:00:16","perc":5},{"server_name":"XXXXXXX","dttm":"2019-07-29 00:00:19","perc":9},{"server_name":"XXXXXXX","dttm":"2019-07-29 00:00:23","perc":13},{"server_name":"XXXXXXX","dttm":"2019-07-29 00:00:24","perc":4},{"server_name":"XXXXXXX","dttm":"2019-07-29 00:00:26","perc":2},{"server_name":"XXXXXXX","dttm":"2019-07-29 00:00:29","perc":6},{"server_name":"XXXXXXX","dttm":"2019-07-29 00:00:33","perc":14},

最佳答案

由于我无权访问您的数据集,因此我无法真正对此进行测试,但我认为问题出在日期时间解析中。 formatTime 返回一个字符串,这不是 scaleTime 函数创建 x 尺度所需的字符串(它需要日期时间格式才能转换为 x 尺度)。您需要从您的代码中删除该部分。

jsonObject.forEach(function (d) {
d.dttm = parseTime(d.dttm);
d.perc = +d.perc;
});

关于javascript - d3.js scaleTime 返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57316641/

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