D3.js d3时间轴误差

D3.js d3时间轴误差,d3.js,D3.js,我试图在D3V5中制作一个简单的折线图,但我在x轴方面遇到了问题 这是我的数据样本 { "2015-05-02":"1", "2015-05-03":"2", "2015-05-04":"1", "2015-05-13":"3", "2015-05-15":"2", "2015-05-16":"2", "2015-05-20":"1", "2015-05-26":"11", "2015-05-27":"1", "2015-05-28":"7", "2015-05-29":"260", } 在这

我试图在D3V5中制作一个简单的折线图,但我在x轴方面遇到了问题

这是我的数据样本

{
"2015-05-02":"1",
"2015-05-03":"2",
"2015-05-04":"1",
"2015-05-13":"3",
"2015-05-15":"2",
"2015-05-16":"2",
"2015-05-20":"1",
"2015-05-26":"11",
"2015-05-27":"1",
"2015-05-28":"7",
"2015-05-29":"260",
}
在这里,我尝试将键解析为日期对象

//attempting to parse dates
//the dates are strings (eg. 2015-02-18)
dates = d3.keys(data);
$.each(dates, function(thisDate){
  var formatDate = d3.timeParse("%Y-%m-%d");
  dates[thisDate] = formatDate(dates[thisDate]);
});
在循环“我的日期”之后,它们是如下所示的日期对象:

Wed Feb 18 2015 00:00:00 GMT-0600 (Central Standard Time)
//x scale
var xScale = d3.scaleTime()
  .domain([minDate,maxDate])
  .range(0,width);
然后我设置我的mins和maxs:

minDate = d3.min(dates); //Wed Feb 18 2015 00:00:00 GMT-0600 (Central Standard Time)
maxDate = d3.max(dates); //Sat Dec 09 2017 00:00:00 GMT-0600 (Central Standard Time)
将我的刻度设置为:

Wed Feb 18 2015 00:00:00 GMT-0600 (Central Standard Time)
//x scale
var xScale = d3.scaleTime()
  .domain([minDate,maxDate])
  .range(0,width);
然后我试着像这样显示我的轴

//x axis
var xAxis = d3.axisBottom(xScale);
svg.append('g')
  .call(xAxis);
var formatDate = d3.timeParse("%Y-%m-%d");
var dates = d3.keys(data).map( d => formatDate(d) );

var xScale = d3.scaleTime()
  .domain(d3.extent(dates))
  .range([0,width]);
当我尝试调用x轴时,它当前给了我这个错误:

Error: <path> attribute d: Expected number, "MNaN,6V0.5HNaNV6".
错误:属性d:预期数字,“MNaN,6V0.5HNaNV6”。
我的道路需要数字?但我只是让它们成为javascript日期对象。我曾经涉猎过D3V3,但我已经相当生疏了。如果您能链接到优秀的v5示例,我们将不胜感激。
谢谢

为什么不这样解析日期

//x axis
var xAxis = d3.axisBottom(xScale);
svg.append('g')
  .call(xAxis);
var formatDate = d3.timeParse("%Y-%m-%d");
var dates = d3.keys(data).map( d => formatDate(d) );

var xScale = d3.scaleTime()
  .domain(d3.extent(dates))
  .range([0,width]);
var数据={
"2015-05-02":"1",
"2015-05-03":"2",
"2015-05-04":"1",
"2015-05-13":"3",
"2015-05-15":"2",
"2015-05-16":"2",
"2015-05-20":"1",
"2015-05-26":"11",
"2015-05-27":"1",
"2015-05-28":"7",
"2015-05-29":"260"
};
var宽度=500;
var formatDate=d3.timeParse(“%Y-%m-%d”);
var dates=d3.keys(data).map(d=>formatDate(d));
var xScale=d3.scaleTime()
.领域(d3.范围(日期))
.范围([0,宽度]);
log('xScale-domain',xScale.domain())

我忘了我的射程上的方括号了

//x scale
var xScale = d3.scaleTime()
   .domain([minDate,maxDate])
   .range(0,width);
应该是

//x scale
var xScale = d3.scaleTime()
     .domain([minDate,maxDate])
     .range([0,width]);
向这篇帖子呼喊答案:


现在进入下一个问题…

您的数据在哪里?您将日期设置为日期键数组,然后迭代该数组,同时修改该数组,这会引发问题。查看xAxis的域
xAxis.domain()
@ksav我向question@rioV8domain()表示这不是一个函数。轴有域吗?我的xScale有一个域。当我在控制台上记录它时,它看起来是这样的:[Wed Feb 18 2015 00:00:00 GMT-0600(中央标准时间),Sat Dec 09 2017 00:00:00 GMT-0600(中央标准时间)]只是一个带有我的最小值和最大值的数组。这就是我想要的,对吗?Oops-是的
xScale.domain()
,这个域看起来不错。这真的是带有错误的xAxis路径吗?谢谢,@rioV8,这更干净了。错误来自射程。我忘了方括号了-_-