跨浏览器d3.js SVG线条渲染日期排序
Cross browser d3.js SVG line rendering date sorting
我使用d3.js:设计了一个简单的条形图/折线图组合
https://i.stack.imgur.com/coJI9.jpg
这张截图来自Firefox。然而,当我用Chrome打开同一个页面时,它看起来是这样的:
https://i.stack.imgur.com/L7H2o.jpg
在Safari中更糟糕:
https://i.stack.imgur.com/KTks5.jpg
我没有费心去测试IE.
这是d3.js的已知问题吗?因为奇怪的是,我在谷歌上找不到任何东西,所以我希望我的代码中确实有错误。
编辑:
根据米塔米特的回答,我可以把问题缩小到日期的排序上。以下是它的样子:
// sort on key values
function keysrt(key, desc) {
return function (a, b) {
return desc ? ~~(a[key] < b[key]) : ~~(a[key] > b[key]);
};
}
[...]
var parseDate = d3.time.format("%Y-%m-%d").parse;
allDates = JSON.parse(allDates);
data = JSON.parse(data);
data.forEach(function (d, i) {
d.Datum = parseDate(d.Datum);
});
allDates.forEach(function (d, i) {
d.Datum = parseDate(d.Datum);
});
allDates.sort(keysrt('Datum'));
data.sort(keysrt('Datum'));
Chrome中的数组顺序:
Sat Jul 20 2013 00:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)
einAusVis.js:57
Sat Jan 05 2013 00:00:00 GMT+0100 (Mitteleuropäische Zeit)
einAusVis.js:57
Sat Sep 15 2012 00:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)
einAusVis.js:57
Sat Aug 18 2012 00:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)
einAusVis.js:57
Sat Oct 13 2012 00:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)
einAusVis.js:57
Sat Dec 08 2012 00:00:00 GMT+0100 (Mitteleuropäische Zeit)
einAusVis.js:57
Sat Oct 15 2011 00:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)
einAusVis.js:57
在Firefox中:
Date {Sat Sep 17 2011 00:00:00 GMT+0200}
einAusVis.js (Zeile 57)
Date {Sat Oct 15 2011 00:00:00 GMT+0200}
einAusVis.js (Zeile 57)
Date {Sat Dec 10 2011 00:00:00 GMT+0100}
einAusVis.js (Zeile 57)
Date {Sat Jan 07 2012 00:00:00 GMT+0100}
einAusVis.js (Zeile 57)
Date {Sat Feb 04 2012 00:00:00 GMT+0100}
einAusVis.js (Zeile 57)
Date {Sat Mar 03 2012 00:00:00 GMT+0100}
einAusVis.js (Zeile 57)
Date {Sat Mar 31 2012 00:00:00 GMT+0200}
einAusVis.js (Zeile 57)
多亏了meetamit和这个问题,我找到了解决方案:
如何按日期对javascript对象数组进行排序
显然,d3日期格式不能很好地跨浏览器处理。使用本机JavaScriptDate对象解决了问题:
allDates.sort(function(a,b) { return new Date(a.Datum).getTime() - new Date(b.Datum).getTime() } );
data.sort(function(a,b) { return new Date(a.Datum).getTime() - new Date(b.Datum).getTime() } );
谢谢你们的帮助!
考虑到圆和路径点的位置一致,渲染不会有问题。所以这一定是一个数据问题;kontoData
有问题。更具体地说,这必须是一件排序的事情,因为行的所有x值都对应于条形图的位置(只是错误的位置)。
你的帖子没有显示你是如何准备数据的,所以对你没有任何帮助。查找与排序相关的问题。它必须是对浏览器敏感的东西。脑海中浮现的两件事是日期和对象键。我所说的"日期"是指不同的浏览器对日期的解析可能不同。所谓"对象键",我的意思是,代码中的某些内容可能会迭代对象的键(使用for..in
循环),并假设键将以一致的顺序出现,这将是一个错误的假设。
- 如何合并不同集合的游标并按日期排序
- 按日期排序和筛选
- SharePoint :按日期排序列表
- JavaScript对象按日期排序
- 跨浏览器d3.js SVG线条渲染日期排序
- extjssortable不按大小写和日期排序
- Angularjs 简单网格 表按日期排序
- 如何使用Javascript对html内容进行排序(按作者排序,按日期排序等)
- javascript foreach on array / json data 但按最新日期排序
- 量角器:检查数据按日期排序
- j查询日期排序
- Javascript按日期排序
- 如何使用Javascript按日期排序,然后按时间排序
- JS对象排序日期排序
- 我该如何调整.当它执行getJSON以返回按日期排序的结果时
- 按日期排序表-我应该使用AJAX/PHP/MySql还是纯Javascript
- Fuelux数据网格日期排序
- 无法设置“”的属性;某事“;在尝试创建按日期排序的数组时出现未定义错误
- 为什么数组不在javascript中按递增日期或递减日期排序
- jqGrid 树网格日期排序无法正常工作