代码之家  ›  专栏  ›  技术社区  ›  CharliesHeron

x轴标签未完全显示

  •  0
  • CharliesHeron  · 技术社区  · 8 年前

    我知道这可能是有史以来写得最糟糕的代码,但请容忍我,我真的还没有掌握D3的窍门。

    所以我有下面的图表 https://jsfiddle.net/El4a/sfu07q67/6/

    包含大量黑客代码。我需要的是显示最后12个月的数据,最后显示的月份是当前月份。因此,在这种情况下(现在是四月),x轴的范围是从2015年5月到2016年4月。如此类推:

    enter image description here

    到目前为止,图表上的数据显示正确。

    然而,标签是一个真正的痛苦。我已经把它们准备好了,但由于一些奇怪的原因,最早的(五月)和当前的(四月)月份没有显示出来。

    我正在按正确的顺序整理月份名称:

        var months = ["Jan", "Feb", "Maa", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"];
    
    var x = [];
    for (var i = 0; i < timePeriod.length; i++) {
      if (timePeriod[i] === 0) {
        x.push(months[timePeriod[i]]);
      }
      else {
        x.push(months[timePeriod[i]-1]);
      }
    }; 
    
    //result : ["Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec", "Jan", "Feb", "Maa", "Apr"]
    

    然后尝试将其粘贴到图形上:

        var count = 0;  
    chart.xAxis
    .axisLabel('Month')  
    .tickValues([1,2,3,4,5,6,7,8,9,10,11,12])
    .tickFormat(function(d) {  
      var label = x[count];  
      count++;
      return label;   
    });
    

    有人能帮我吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   rby    8 年前

    问题在于xAxis的tickFormat实现。由于某些原因,计数变量从0运行到13,当您最后两次访问x(12和13)时,返回值是未定义的。

    将tickFormat函数更改为以下内容,它应该可以工作:

    .tickFormat(function(d) {  
      return x[d-1];       
     });
    

    注意d-1。