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

更新Highcharts上的数据标签位置

  •  1
  • Carolo  · 技术社区  · 7 年前

    当我使用dataLabel时。用于更新DataLabels位置的translate命令工作正常,但如果使用yAxis[I]。更新命令,Highcharts不再移动任何数据标签。

    如果选择“更新数据”,则数据标签不会移动,否则会正确移动。 fiddle example

    var chart = new Highcharts.Chart({
      chart: {
        renderTo: 'container',
        type:'column',        
        events:
        {
            load: function(){
                for(var j = 0; j < this.series.length; j++) {
                    for(var i = 0; i < this.series[j].data.length; i++) {
                        var d = this.series[j].data[i];
                        d.dataLabel.translate(d.dataLabel.x, d.dataLabel.y-50);
                    }
                }
            }
        }        
      },
      plotOptions: { series: {dataLabels: {enabled: true} } },    
      xAxis: {categories: ['Jan', 'Feb', 'Mar', 'Apr']},    
      yAxis: {max: 100, min:0},    
      series: [{data: [60, 70, 45, 85]}]} , function(chart){
    if(confirm('Update on YAxis?'))
    {
      chart.yAxis[0].update({
          max: 500,
          min: 50,
          tickInterval: 50
      });
    }});
    

    有什么想法吗?我如何更新Yaxis数据和更改数据标签位置?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Kamil Kulig    7 年前

    如果将事件更改为 load render ,函数来自 translate attr d.dataLabel.y d.dataLabel.alignAttr.y 代码将起作用:

        events: {
          render: function() {
            for (var j = 0; j < this.series.length; j++) {
              for (var i = 0; i < this.series[j].data.length; i++) {
                var d = this.series[j].data[i];
                d.dataLabel.attr({
                  y: d.dataLabel.alignAttr.y - 50
                });
              }
            }
          }
        }
      },
    

    现场演示: http://jsfiddle.net/BlackLabel/LL4z4eL5/

    顺便说一下,做同样事情的一种更简单的方法是使用 dataLabels.y 属性: http://jsfiddle.net/BlackLabel/tpor20xa/