D3.js年份表显示欧洲和北美用户的不同数据

时间:2016-10-11 14:18:54

标签: javascript date d3.js

在使用D3.js开发显示各种指标数据的网站期间,我遇到了一个我无法解释的奇怪错误。

如何重新创建问题

  1. 请访问http://green-horizons.eu/indicator/scientific-publications-bioeconomy
  2. 页面
  3. 在两个文本框下方有一个地图,上方有四个按钮,请点击“折线图”。
  4. 地图将替换为折线图,显示比利时数据的绿线和EU / ERA平均值的红线。
  5. 现在,请关注显示年份的x轴。
  6. x轴应涵盖1990-2013的年份范围。我和我的同事在欧洲进行的所有测试都是如此(测试国家是比利时,爱沙尼亚和德国),见下图。

    Correct x axis (Europe)

    然而,对于美国(可能还有加拿大)的任何人来说,x轴显示的是1989-2012的范围,请参见下面的截图(请注意,由于最近仅作为新功能添加了红线,因此缺少红线)

    Incorrect x axis (USA)

    在内部,数据来自上传的CSV文件,这些文件被解析为JSON,然后在D3.js中使用。对于日期比例,所有年份值都会扩展为使用类似

    的完整日期
    dateValue = year + '-01-01';
    

    包含数据的javascript对象还会显示所有用户(即使在美国)的正确年份,但显示屏会关闭一年。

    这怎么可能?我想过时区,但我没有时间,只是约会。 我甚至试图将日期设置为6月1日而不是1月,以确保但仍然是相同的行为。

    任何人都可以指出我想要寻找的方向,我被困在了如何找出错误来源的想法。

    关于Mark关于该功能的评论的更新

    // Determine year range.
    var yearTicks = [];
    for (var y = obj.chartYMin; y <= obj.chartYMax; y++) {
      yearTicks.push(new Date(y + "-01-01"));
    }
    // Set x scale function
    var x = d3.time.scale()
      .domain([new Date((obj.chartYMin - 1) + "-01-01"), 
         d3.time.day.offset(new Date((obj.chartYMax + 1) + "-01-01"), 1)])
      .rangeRound([0, obj.width]);
    // Create x axis
    var xAxis = d3.svg.axis().scale(x)
      .tickSize(-obj.height)
      .tickSubdivide(true)
      .tickValues(yearTicks)
      .tickFormat(d3.time.format("%Y"));
    // Update x axis in graph.
    d3.select("#scoreboard-" + obj.chartType + "-canvas .x.axis").call(xAxis);
    

    obj.chartYMin和obj.chartYMax是所提供数据中的最小和最大年份值,yearTicks是数据中存在的所有年份的数组。

0 个答案:

没有答案