2015-02-24 82 views
0

我正在使用x轴minRange以使我的数据点始终从x轴左侧开始。我的数据集最多可以有9个点。每当我的组只有一个数据点或几个数据点时,如果我没有将minRange设置为适当的值,这些将最终集中在图中。我的x轴设置为categories: []将我的时间值用作字符串而不是日期值。问题是,当我只有两个数据点和minRange = 9时,我将有七个轴标签,编号为2-9,没有数据点。我如何删除这些标签?如何删除Highcharts中没有数据点的轴标签?

Fiddle

var json = [{"price":"15","time":"12:00"},{"price":"20","time":"12:30"}]; 
var processed_json = new Array(); 
$.map(json, function (obj, i) { 
    processed_json.push({name: obj.time,y: parseInt(obj.price) }); 
}); 

$('#container').highcharts({ 
     xAxis: { 
      categories: [], 
      minRange: 9, 
      min: 0 
     }, 
     yAxis: { 
      minRange: 30 
     }, 
     series: [{ 
      data: processed_json 
     }] 
    }); 

回答

2

我会用这个tickPositions。 您可以通过简单地将建立在同一个循环中tickPositions阵列,您正在使用,以建立自己的数据:

tickPositions.push(i); 

例子:

+0

这里有两个很好的答案。你只需要一个额外的变量,并且很好地利用了'tickPositions'。真的很优雅。谢谢! – 2015-02-25 00:16:47

1

另一种方式来做到这一点是手动提供的类别列表中highcharts库。这个想法是让类别与您的数据点相对应,并以obj.time命名,其余类别只是空字符串。

var categoryCount = 10; 
var json = [{"price":"15","time":"12:00"},{"price":"20","time":"12:30"}]; 
var processed_json = new Array(); 
var categories = new Array(categoryCount); 
categories.fill("", 0, categoryCount); //Fill list of categories with empty strings 

$.map(json, function (obj, i) { 
    processed_json.push({name: obj.time,y: parseInt(obj.price) }); 
    categories[i] = obj.time; //Set the time for particular category 
}); 

$('#container').highcharts({ 
      xAxis: { 
       categories: categories, 
       minRange: categoryCount - 1, 
       min: 0 
      }, 
      yAxis: { 
       minRange: 30 
      }, 
      plotOptions: { 

      }, 
      series: [{ 
       data: processed_json 
      }] 
     }); 

变量类别应该类似[ “12:00”, “12:30”, “”, “”, “”, “”, “”, “”, “”]在这个特定的案件。

+0

开箱的。很好的答案,比其他答案涉及更多的步骤,但是非常有用,因为它可以彻底解释发生了什么。谢谢! – 2015-02-25 00:21:02