Highcharts蜘蛛图表与径向渐变填充不居中

时间:2017-12-11 10:45:36

标签: javascript html css highcharts

我有一个充满径向渐变的蜘蛛网高图。当所有边具有相同的值时,渐变很好。但是当它具有随机值时,渐变不能正确填充。它偏离中心并变成椭圆形。

var highChartsData = {
chart: {
  polar: true,
  type: 'area',
  events: {
        load: function () {series = this.series[0];}
    }
},
xAxis: {
  categories: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
  tickmarkPlacement: 'on',
  lineWidth: 0

},
yAxis: {
  gridLineInterpolation: 'polygon',
  lineWidth: 0,
  min: 0,
  max: 12
},
tooltip: {
    enabled: false
},
title: {
    enabled: false
},
credits: {
  enabled: false
},
exporting: {
  enabled: false
},
legend: {
  enabled: false
},
series: [{
  name: 'Planning',
  type: 'area',
  color: {
    radialGradient: {
        cx: 0.5,
      cy: 0.5,
      r: 1
    },
    stops: [
      [0, 'rgba(147, 255, 228, 0.8)'],
      [1, 'rgba(0, 105, 165,1)']
    ]
  },
  data: [15, 15, 15, 15, 15, 15, 15],
  pointPlacement: 'on'
}]};

检查此链接: http://jsfiddle.net/a6fmfq1a/44/

1 个答案:

答案 0 :(得分:1)

更新

我提出的原始解决方案没有处理渐变的形状 - 它可能是椭圆形而不是完美的圆形。

使用gradientUnits: 'userSpaceOnUse'似乎是一种更好,更简单的方法。

  defs: {     
    gradient1: { // key
      tagName: 'radialGradient',
      id: 'gradient-1',
      gradientUnits: 'userSpaceOnUse',     
      cx: 300,
      cy: 160,
      r: 300,
      children: [{
        tagName: 'stop',
        'stop-color': 'rgba(0, 255, 0,1)',
        offset: 0
      }, {
        tagName: 'stop',
        'stop-color': 'rgba(0, 0, 0, 1)',
        offset: 0.3
      }]
    }
  },

<强> CSS:

.highcharts-area {
  fill-opacity: 1;
  fill: url(#gradient-1);
}

现场演示: https://fiddle.jshell.net/kkulig/vokL08ds/

此示例使用样式模式https://www.highcharts.com/docs/chart-design-and-style/style-by-css)。

原帖:

SVG渐变的中心似乎是基于形状本身的最小和最大坐标值,而不是整个图表。

此解决方案是手动计算并应用radialGradient.cxradialGradient.cy属性的偏移量。

现场演示中,仅针对 x 值(y值需要以类似方式处理):https://fiddle.jshell.net/kkulig/ru85bz24/

// handle gradient center
var x1, // leftmost
  x2, // rightmost
  centerX,
  offsetPx,
  offsetAdjustment = -3;

x1 = x2 = series.points[0].graphic.x;

// find leftmost and righmost x positions
series.points.forEach(function(p) {
  var x = p.graphic.x;
  if (x < x1) {
    x1 = x;
  } else if (x > x2) {
    x2 = x;
  }
});

// compute offset
centerX = (x1 + x2) / 2;
offsetPx = (chart.chartWidth / 2) - centerX + offsetAdjustment;
offsetFraction = offsetPx / (x2 - x1);


// update gradient
series.update({
  color: {
    radialGradient: {
      cx: 0.5 + offsetFraction,
      cy: 0.5,
      r: 1
    }
  }
});

要查看效果,请先点击Toggle Contrast,然后点击Toggle Numbers

Highcharts不会将图的中心准确地放在图表的中心,所以我添加了offsetAdjustment变量来校正渐变的位置(在这种情况下为3px)。