【发布时间】:2014-06-07 07:46:02
【问题描述】:
这是我之前使用 php 或(我认为是)不必要的复杂 MySQL 查询解决的问题,但我突然想到 JavaScript / d3.js 中必须有更优雅的解决方案。
假设我有一个日期和值的数据集,我想在 d3.js 中将其转换为条形图。
date,value
2013-01,53
2013-02,165
2013-03,269
2013-04,344
2013-05,376
2013-06,410
2013-07,421
2013-09,376
2013-10,359
2013-11,392
2013-12,433
2014-01,455
2014-02,478
您会注意到数据中没有第 8 个月(8 月)的条目。假设 8 月是零值,最终结果是生成的条形图看起来正常,但当然没有第 8 个月应该是间隙(零)。
我有一个jsfiddle of the script and data here 供参考。
我考虑过尝试添加一个填充为零的完整数据集,然后对其进行迭代以包含数据中的值,但这似乎也过于复杂。我假设有一个优雅的解决方案,我太无知了。
感谢您的帮助。
编辑#1:回应 explunit 的回答:
理想情况下,解决方案应该是对数据系列的操作,而不是仅适用于条形图。这意味着this jsfiddle 处的折线图的等价物将在其中间突然下降。
编辑#2:玩了一会儿之后:
在尝试了Google groups page here 上的建议后,我设法获得了一段代码来完成我正在寻找的事情。它获取时间戳数据,根据时间范围创建一个域,并创建一个具有不同月份的单独数组(在本例中)。然后我粗略地遍历这两个数组集,并将适合初始(未完全填充时间值)数组的值添加到所有时间值(并且数据值最初设置为零)的数组中。
最终结果是一个折线图,最初看起来像这样,因为它在 2013 年 7 月到 9 月之间迭代;
随后被渲染成这样,因为 August 的值将被添加为零;
我会第一个说。虽然它完成了我在这种情况下想要的工作,但距离优雅或可扩展还有很长的路要走。如果比我更聪明的人能够看到如何减少冒犯性,我将不胜感激。
【问题讨论】:
-
嗨 d3noob!我喜欢你非常有用的书。那么,你是说你想要一个差距......就像this 一样?我不清楚这个......对不起。
-
一定是您没有幸知道特定数据点的数据丢失...因此您提到的参考零填充数据...嗯,会让你有空时插话:)
-
谢谢蕨类植物。您对差距的看法是正确的,并且没有奢侈地知道数据没有与时间戳相关的零值是正确的。我将在下面探讨 explunit 的答案,看看是否符合要求。乍一看还不错:-)。
-
事实上,现在搜索该主题时使用的假设是我正在尝试做的是使定量尺度像序数尺度一样。似乎谷歌群组上有一个帖子也提出了一些想法。 groups.google.com/forum/#!topic/d3-js/7GsDmnB4kdE
标签: javascript d3.js