x轴标签未完全显示

时间:2016-04-28 12:28:19

标签: d3.js nvd3.js axis-labels

我知道这可能是有史以来编写的最糟糕的代码,但请耐心等待,我真的不能掌握D3(还有)。

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

包含很多hacky代码。我需要的是显示最近12个月的数据,最后显示的月份是当前月份。所以在这种情况下(4月),x轴的范围从may(2015)到4月(2016)。像这样:

enter image description here

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

然而,标签真的很痛苦。我觉得他们差不多好,但由于一些奇怪的原因,最老的(可能)和当前(4月)月份没有显示出来。

我有点按正确顺序对月份名称进行排序:

    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 个答案:

答案 0 :(得分:1)

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

将tickFormat功能更改为以下内容,它应该有效:

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

请注意d-1。