如何在 Highcharts 中为小刻度线创建渐变效果?

问题描述 投票:0回答:1

我目前正在使用 Highcharts 创建仪表图表,我想对 y 轴上的小刻度线应用渐变效果。具体来说,我希望小刻度标记以某种颜色(例如黑色)开始,并逐渐过渡到仪表上的另一种颜色(例如红色)。

下面是我的 highchart 选项值: 常量选项 = { 图表: { 类型:'仪表', 绘图背景颜色:'白色', 绘图边框宽度:0, 绘图阴影:假, 高度:'200px', }, 标题: { 文本:标题, 垂直对齐:'底部', 居中对齐', 风格: { 颜色: '#414D55', 字体大小:'11px', 字体粗细:'粗体' } }, 窗格:{ 起始角度:-130, 结束角度:130, 中心:['50%','75%'], 尺寸:'160px',
背景:空, }, y 轴:{ 分钟, 最大限度, 次要刻度间隔:'自动', 小刻度长度:2, secondaryTickPosition: '内部', 刻度间隔:刻度间隔, 刻度长度:2, 刻度宽度:0, 偏移量:-24, 标签: { 距离:-12, 风格: { 字体大小:'10px', } }, 线宽:0, 绘图带:绘图带 },

    series: [
        {

            name: '',
            data: [min],
            tooltip: {
                valueSuffix: '',
                visible: false
            },
            dataLabels: {
                enabled: false
            },
            // needle configuration 
            dial: {
                radius: '70%', 
                backgroundColor: '#414D55',
                baseWidth: 2.7,  
                baseLength: '0%',
                rearLength: '0%',
                length: 0,
                zIndex: 23
            },

            // needle with circle
            pivot: {
                backgroundColor: '#414D55',
                radius: 1.2,
                length: 0,
                zIndex: 230
            },
            states: {
                hover: {
                    enabled: false,
                }
            }
        }]
};

我想要小刻度线的渐变效果。它应该以黑色开始,以红色结束。效果应该看起来像随着不透明度的变化从黑变红。

highcharts gauge react-highcharts speedometer
1个回答
0
投票

这不能直接从 API 获得,需要添加自定义函数。

这是一个简化的图表配置,其中包含您可以基于的功能:

Highcharts.chart('container', {
  chart: {
    type: 'gauge',
    events: {
      load: function() {
        let chart = this,
          yAxis = chart.yAxis[0],
          key, minorTick, color, ratio;

        function interpolateColor(color1, color2, factor) {
          let result = color1.slice();
          for (let i = 0; i < 3; i++) {
            result[i] = Math.round(result[i] + factor * (color2[i] - color1[i]));
          }
          return 'rgb(' + result.join(',') + ')';
        }  

        for (key in yAxis.minorTicks) {
          minorTick = yAxis.minorTicks[key];
          ratio = minorTick.pos / yAxis.max;

          color = interpolateColor([0, 0, 0], [255, 0, 0], ratio);

          minorTick.mark.attr({
            stroke: color
          });
        }
      }
    }
  },
  yAxis: {
    min: 0,
    max: 100,
  },
  series: [{
    data: [80]
  }]
});

演示: https://jsfiddle.net/BlackLabel/dzpkqo29/

© www.soinside.com 2019 - 2024. All rights reserved.