Highcharts Demo

author(s): Torstein Hønsi

by Ankit Patidar

HTML

<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/highcharts-more.js"></script>
<script src="https://code.highcharts.com/modules/solid-gauge.js"></script>

<div id="container" style="width: 400px; height: 400px; margin: 0 auto">
</div>
<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" viewBox="0 0 300 300">
  <defs>
    <filter id="glow" x="-5000%" y="-5000%" width="10000%" height="10000%">
      <feFlood result="flood" flood-color="#000" flood-opacity=".2"></feFlood>
      <feComposite in="flood" result="mask" in2="SourceGraphic" operator="in"></feComposite>
      <feMorphology in="mask" result="dilated" operator="dilate" radius="3"></feMorphology>
      <feGaussianBlur in="dilated" result="blurred" stdDeviation="5"></feGaussianBlur>
      <feMerge>
        <feMergeNode in="blurred"></feMergeNode>
        <feMergeNode in="SourceGraphic"></feMergeNode>
      </feMerge>
    </filter>
  </defs>
</svg>

CSS

.highcharts-series-group {
  filter: url(#glow)
}

JavaScript

var chartPro = Highcharts.chart('container', {

  chart: {
    type: 'solidgauge',
    marginTop: 0
  },

  title: {
    text: false,
    style: {
      fontSize: '24px'
    }
  },

  tooltip: {
    borderWidth: 0,
    backgroundColor: 'none',
    shadow: false,
    style: {
      fontSize: '16px'
    },
    pointFormat: '{series.name}<br><span style="font-size:2em; color: {point.color}; font-weight: bold">{point.y}%</span>',
    positioner: function(labelWidth) {
      return {
        x: 200 - labelWidth / 2,
        y: 180
      };
    }
  },

  pane: {
    startAngle: 0,
    endAngle: 360,
    background: [{
      outerRadius: '88%',
      innerRadius: '88%',
      backgroundColor: 'yellow',
      borderWidth: 0
    }]
  },

  plotOptions: {
    solidgauge: {
      animation: false,
      dataLabels: {
        enabled: false
      },
      linecap: 'round',
      stickyTracking: false,
      rounded: true
    }
  },

  yAxis: {
    min: 0,
    max: 100,
    lineWidth: 0,
    tickPositions: []
  },

  series: [{
    name: 'Something',
    data: [{
      color: '#e76a0b',
      radius: '112%',
      innerRadius: '88%',
      y: 100,
      borderColor: '#e76a0b'
    }, {
      color: '#007272',
      radius: '112%',
      innerRadius: '88%',
      y: 80,
      borderColor: '#007272'
    }]
  }]
});

// Bring life to the dials
var point = chartPro.series[0].points[1];
var interval = setInterval(function(){
  var newVal = 0;
  if(chartPro){
    newVal = point.y;
    console.log(newVal--);
    point.update(newVal);
  }
  if(newVal <= 0 || newVal > 100){
    clearInterval(interval);
  }
  
}, 1000);