更改highcharts中特定刻度的样式

时间:2017-02-21 23:44:08

标签: javascript highcharts

只有满足某些条件才能更改特定的刻度标记。

example

{
    xAxis: {
        categories: ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00',
            '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00',
            '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'],
        labels: {
            formatter() {
                const isCurrentHour = this.value === moment().format('HH:00');
                if (isCurrentHour) {
                    return (`<span class="currentHour">${this.value}</span>`);
                }
                return this.value;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

你不能通过配置来做到这一点,但是你可以通过包装tick.render()方法来实现它 - 它正在扩展Highcharts,阅读更多相关信息here

因此,您需要做的是更改tick.mark形状和tick.label样式。

const H = Highcharts;
H.wrap(H.Tick.prototype, 'render', function (p, i, o, op) {
  p.call(this, i, o, op);
  const axis = this.axis;

  if (axis.isXAxis && (this.pos === 18 || this.pos === 8)) {
    console.log(this)
    const mark = this.mark;
    const label = this.label;
    const d = mark.d.split(' ').map(v => {
      var n = Number(v);
      return H.isNumber(n) ? n : v;
    });

    d[2] -= 5;
    d[5] += 20;


    mark.attr({
      'stroke-width': 1,
      stroke: 'black',
      d: d.join(' ')
    });

    label.css({
      fontSize: '20px',
      fontWeigth: 'bold',
      color: 'black'
    });

    label.attr({
      y: label.xy.y - label.getBBox().height
    })
  }
});

实例和输出

http://jsfiddle.net/rw194Lz5/

custom ticks