Highcharts问题 - 在缩放图表中显示标签

时间:2011-04-29 11:31:04

标签: charts highcharts labels

我在xAxis中有一个包含200多个类别的缩放列图表。因此,当它处于初始状态(比例1:1)时,所有这些人都显示在X轴下,即使我将它们垂直放置也不可能读取任何内容。我需要缩放图表以使标签可见。

以下是问题的屏幕截图: enter image description here

这是我的代码: http://jsfiddle.net/sherlock85/hJcQm/

是否可以根据缩放级别调整标签的浓度(可能会自动更改步骤)?

我真的很感谢你的帮助。

谢谢, 安杰伊

4 个答案:

答案 0 :(得分:3)

从最简单到最困难......

由于您的类别主要是数字(例如“mir001”),因此您可以省略类别,这会阻止它们全部显示。然后他们会显示1,2,3等等。

或者,您可以删除类别并使用label formatter。在这种情况下,您可以执行类似的操作,再次利用标签看起来是数字并且不断增加的事实:

chart = new Highcharts.Chart({
    xaxis: {
        labels: {
            formatter: function() {
                return "mir" + this.value;
            }
        }
    }
});

以上两种方法都会减少标签数量(标签会遵循某些模式,例如1,50,100,直到缩放)。

如果您想对标签非常讲究,则必须使用标签格式化程序并进行一些数学运算以查找图表的比例以确定标签的显示方式。例如,你可以做这样的事情,虽然它很复杂:

var categories = [] //have your categories as a separate list
var buckets = 4; 
var labelFormatter = function(frequency) {
    var count = 0;
    frequency = frequency || 0;
    return function () {
        count++;
        if ((count > frequency) || (frequency < 1)) {
                return this.value
        }
    }
};

chart = new Highcharts.Chart({
    zoomtype: 'x',
    events: {
        selection: function(event) {
            if (event.xAxis) {
                var scale = event.xAxis[0];
                var frequency = Math.floor((scale.max - scale.min) / buckets)
                this.xaxis[0].labels.formatter = labelFormatter(frequency);
            }
        }
    },
    xaxis: {
        labels: {
            formatter: labelFormatter(Math.floor(categories.length/buckets))
        }
    }
});

我应该指出,最后的解决方案并不完全有效,进一步说明了它的难度。

答案 1 :(得分:0)

我的解决方案:

xAxis:
{
    categories: [ <!-- your categories -->],
    tickInterval: 5,        // Cada 5 valores muestra valor (five jump interval)
    labels:
    {
        rotation: -35,
        style:
        {
            font: 'normal 12px Verdana, sans-serif'
        }
    }
},

答案 2 :(得分:0)

对于原始问题可能有点太迟了,但我正在开发一些与Highcharts有关的东西,而我正在寻找这个问题。

以下是我如何做到这一点,以供将来参考:

xAxis: {
    labels: {
        step: 5
    },
    events: {
        setExtremes: function(event) {
            if (event.max) {
                var frequency = Math.floor((event.max - event.min) / 17);
                this.options.labels.step = frequency;
            } else {
                this.options.labels.step = 5;
            }
        }
    }
},

它基本上会检查我们是否正在缩放 - if (event.max) - 或重置。 17是我缩小时获得的标签数量,标签步长设置为5并且使用这个特定的数据集(我很确定这可能会更加精致 - 但它确实有效)。

答案 3 :(得分:0)

这就是我如何解决这个问题:

xAxis: {
   tickPositioner: function () {
      var positions = [],
          min = Math.floor(this.min),
          max = Math.ceil(this.max),
          tick = min,
          increment = Math.ceil((max - min) / 30);

      for (; tick < max; tick += increment) {
         positions.push(tick);
      }
      positions.push(max);
      return positions;
   }
}

在重绘时调用tickPositioner。最小值和最大值包含左右最多(x轴)包含值。