Добавить другой цвет в линейке X в зависимости от процента

Я хочу добавить разные цвета для частей бара на основе частичного заполнения.

В тот момент, когда частичное заполнение равно 0,5 (50%), половина бара становится темнее зеленого. Есть ли способ определить цвет в баре в процентах?

Например, 0-49 делают частичное заполнение красным, а остальное белым. 50-100 делают частичное заполнение зеленым, а остальные белым и т. Д.

https://jsfiddle.net/sg0co5au/11/

Highcharts.chart('container', {
    chart: {
        type: 'xrange'
    },
    title: {
        text: 'Highcharts X-range'
    },
    xAxis: {
        type: 'datetime'
    },
    yAxis: {
        title: {
            text: ''
        },
        categories: ['Prototyping', 'Development', 'Testing'],
        reversed: true
    },
    series: [{
        name: 'Project 1',
        // pointPadding: 0,
        // groupPadding: 0,
        borderColor: 'gray',
        pointWidth: 20,
        colour:'#FF0000',
        data: [{
            x: Date.UTC(2014, 10, 21),
            x2: Date.UTC(2014, 11, 2),
            y: 0,
            partialFill: 0.50,
            color:'#469E5A'
        }, 
        ],
        dataLabels: {
            enabled: true
        }
    }]

});

2 ответа

Я вижу, что фоновый прямоугольник имеет класс "highcharts-point highcharts-color-0 highcharts-partfill-original" со значением заполнения #469E5A, Изменить это на "white" где бы вы не определили его CSS.

Наложение на это <rect x="6.5" y="85.5" width="696" height="20" rx="3" ry="3" class="highcharts-partfill-overlay" clip-path="url(#highcharts-51rfx2r-4)" stroke="gray" stroke-width="1" fill="rgb(0,82,14)"></rect>

Для цвета в процентах используйте переменную для хранения процента, например percent

if(percent<=49){
    document.getElementsByClassName("highcharts-partfill-overlay").setAttribute("fill", "red")
}
else if(percent>49){
    document.getElementsByClassName("highcharts-partfill-overlay").setAttribute("fill", "green")
}

Вы можете изменить цвет поля фона, используя document.getElementsbyClassName()

Да, вы можете установить цвет заливки после загрузки графика, сверяясь с тем, какая часть бара заполнена.

Сначала установите параметры диаграммы для переменной, чтобы вы могли обратиться к ним позже

var thisChart = Highcharts.chart('container', { /* your options here */ });

Затем, после загрузки диаграммы, проверьте, находится ли заливка ниже или выше 50 (в этом случае 0,5, чтобы соответствовать значению, которое вы установили в partialFill) и использовать series.update() функция ( https://api.highcharts.com/class-reference/Highcharts.Series) для изменения цвета:

if (thisChart.series[0].data[0].partialFill < 0.5) {
  thisChart.series[0].update({
    partialFill: {
      fill: 'red'
    }
  });
} else {
  thisChart.series[0].update({
    partialFill: {
      fill: '#469E5A'
    }
  });
}

Я сделал несколько небольших изменений в вашем коде. Во-первых, я явно установить серию fill цвет на зеленый вы выбрали. Затем я устанавливаю цвет ваших данных на белый. Это делает цвет частичной заливки цветом серии, а остальное пространство - белым. Затем, когда вы проверяете partialFill значение после построения графика, если значение ниже 0,5, заполненное значение будет красным.

  series: [{
    name: 'Project 1',
    borderColor: 'gray',
    pointWidth: 20,
    partialFill: {
      fill:'#469E5A' /* default color of the filled part of the bar */
    },
    data: [{
      x: Date.UTC(2014, 10, 21),
      x2: Date.UTC(2014, 11, 2),
      y: 0,
      partialFill: 0.50,
      color: 'white' /* color of the unfilled part of the bar */
    }],
    dataLabels: {
      enabled: true
    }
  }]

Смотрите обновленную версию своей скрипки здесь: https://jsfiddle.net/brightmatrix/sg0co5au/46/

Я надеюсь, что эта информация полезна для вас.

Другие вопросы по тегам