2016-01-12 5 views
1

У меня есть карта тепла с использованием Highcharts, где я сталкиваюсь с некоторыми проблемами с текстовыми вырезками.Highchart legend имеет обрезанный текст

Когда я добавить ярлык на colorAxis текст отсекается:

colorAxis: { 
    min: 0, 
    minColor: '#FFFFFF', 
    maxColor: Highcharts.getOptions().colors[0], 
    labels: { 
     format: '{value} test test test' 
    }, 
} 

Highchart heat map

Я только добавил colorAxis.labels.format недвижимость.

Смотрите мой пример здесь: http://jsfiddle.net/dennismadsen/7sp8ddpq/1/

Он основан/раздвоенный на этом официальном образце Highchart: http://jsfiddle.net/highcharts/4aqhB/

+0

Вы можете увеличить spacingRight параметров: http://jsfiddle.net/7sp8ddpq/2/ –

+0

@SebastianBochan Не работает, если длина этикетки является динамическим. – dhrm

+1

Это связано с известной ошибкой, о которой сообщают наши разработчики: https://github.com/highcharts/highcharts/issues/3463 –

ответ

1

Highcharts имеет свои особенности в расположении легенды. Вы явно задать ширину, т.е.

legend: { 
     ... 
     width: 140, 
     ... 
    }, 
+0

Что делать, если текст ярлыка динамичен и поэтому я не могу заранее знать ширину? – dhrm

1

Найден способ сделать его динамичным, основываясь на сообщение от TorsteinHonsi на GitHub. Код в основном измеряет ширину метки и перерисовывает диаграмму. Посмотрите, подходит ли оно вашим потребностям.

$(function() { 

    var leg = 'Whatever'; 

    var aChart = new Highcharts.Chart({ 
     chart: { 
      type: 'heatmap', 
      marginTop: 40, 
      marginBottom: 40, 
      renderTo: 'container' 
     }, 
     title: { 
      text: 'Sales per employee per weekday' 
     }, 
     xAxis: { 
      categories: ['Alexander', 'Marie', 'Maximilian', 'Sophia', 'Lukas', 'Maria', 'Leon', 'Anna', 'Tim', 'Laura'] 
     }, 
     yAxis: { 
      categories: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'], 
      title: null 
     }, 
     colorAxis: { 
      min: 0, 
      minColor: '#FFFFFF', 
      maxColor: Highcharts.getOptions().colors[0], 
      labels: { 
       format: '{value} ' + leg, 
       style: { 
        textOverflow: "clip", 
        overflow: "visible", 
        whiteSpace: "nowrap" 
       } 
      }, 
     }, 
     legend: { 
      align: 'right', 
      layout: 'vertical', 
      margin: 0, 
      verticalAlign: 'top', 
      y: 25, 
      symbolHeight: 320 
     }, 
     tooltip: { 
      formatter: function() { 
       return '<b>' + this.series.xAxis.categories[this.point.x] + '</b> sold <br><b>' + 
         this.point.value + '</b> items on <br><b>' + this.series.yAxis.categories[this.point.y] + '</b>'; 
      } 
     }, 
     series: [{ 
       name: 'Sales per employee', 
       borderWidth: 1, 
       data: [[0, 0, 10], [0, 1, 19], [0, 2, 8], [0, 3, 24], [0, 4, 67], [1, 0, 92], [1, 1, 58], [1, 2, 78], [1, 3, 117], [1, 4, 48], [2, 0, 35], [2, 1, 15], [2, 2, 123], [2, 3, 64], [2, 4, 52], [3, 0, 72], [3, 1, 132], [3, 2, 114], [3, 3, 19], [3, 4, 16], [4, 0, 38], [4, 1, 5], [4, 2, 8], [4, 3, 117], [4, 4, 115], [5, 0, 88], [5, 1, 32], [5, 2, 12], [5, 3, 6], [5, 4, 120], [6, 0, 13], [6, 1, 44], [6, 2, 88], [6, 3, 98], [6, 4, 96], [7, 0, 31], [7, 1, 1], [7, 2, 82], [7, 3, 32], [7, 4, 30], [8, 0, 85], [8, 1, 97], [8, 2, 123], [8, 3, 64], [8, 4, 84], [9, 0, 47], [9, 1, 114], [9, 2, 31], [9, 3, 48], [9, 4, 91]], 
       dataLabels: { 
        enabled: true, 
        color: 'black', 
        style: { 
         textShadow: 'none' 
        } 
       } 
      }] 

    }); 

    Highcharts.Legend.prototype.update = function (options) { 
     this.options = Highcharts.merge(this.options, options); 
     this.chart.isDirtyLegend = true; 
     this.chart.isDirtyBox = true; 
     this.chart.redraw(); 
    }; 

    aChart.legend.update({ 
     width: 50 + $('.highcharts-axis-labels tspan').outerWidth() 
    }); 
});