JS Center-Zeroed Gauge Chart

时间:2016-09-14 11:29:20

标签: javascript charts highcharts gauge

我一直在使用Highcharts作为我正在构建的网络应用程序,到目前为止它们已被证明是伟大的。但是现在我的任务是为一些看起来像这样的数据创建一个衡量标准:

gauge

我找不到任何图表库,可以很好地渲染一个居中的归零量规(从中心到针摆动的位置)。

有没有人对库或自定义实现有任何建议?

(P.S。我需要基于它的示例标准来自PDF报告,所以没有任何反向工程的机会)

1 个答案:

答案 0 :(得分:2)

以下是您可以使用的内容:https://jsfiddle.net/remisture/pb70kduv/5/

将两者结合起来完成:

  • http://www.highcharts.com/demo/gauge-speedometer
  • http://www.highcharts.com/demo/gauge-solid

    $(function () {
     var settings = {
    gaugeMinValue : 0,
    gaugeMaxValue : 8000,
    gaugeStartValue : 3000,
    gaugeStartAngle : -90,
    gaugeEndAngle : 90,
    gaugeUpdateInterval : 500 // ms
    };
    
    var options = {
    tooltip : {
      enabled : false
    },
    chart : {
      type : 'gauge',
      backgroundColor : 'rgba(255, 255, 255, 0)',
      plotBackgroundColor : null,
      plotBackgroundImage : null,
      plotBorderWidth : 0,
      plotShadow : false,
      spacing : [5, 30, 5, 30],
      style : {
        fontSize : '1em'
      }
    },
    
    title : false,
    
    pane : {
      startAngle : settings.gaugeStartAngle,
      endAngle : settings.gaugeEndAngle,
      background : {
        backgroundColor : 'rgba(255, 255, 255, 0)',
        borderWidth : 0,
        innerRadius : '60%',
        outerRadius : '100%',
        shape : 'arc'
      }
    },
    
    plotOptions : {
      gauge : {
        /*dial: {
         radius: 0
         },
         pivot: {
         radius: 0
         },*/
        dataLabels : {
          borderWidth : 0,
          padding : 0,
          verticalAlign : 'middle',
          style : false,
          formatter : function () {
            var output = '<div class="gauge-data">';
            output += '<span class="gauge-value">' + this.y + '</span>';
            output += '</div>';
    
            return output;
          },
          useHTML : true
        }
      },
      pie : {
        dataLabels : {
          enabled : true,
          distance : -10,
          style : false
        },
        startAngle : settings.gaugeStartAngle,
        endAngle : settings.gaugeEndAngle,
        center : ['50%', '50%'],
        states : {
          hover : {
            enabled : false
          }
        }
      }
    },
    
    // the value axis
    yAxis : {
      offset : 0,
      min : settings.gaugeMinValue,
      max : settings.gaugeMaxValue,
    
      title : false,
    
      minorTickWidth : 0,
    
      tickPixelInterval : 30,
      tickWidth : 2,
      tickPosition : 'outside',
      tickLength : 14,
      tickColor : '#ccc',
      lineColor : '#ccc',
      labels : {
        distance : 28,
        rotation : "0",
        step : 2,
      },
    
      plotBands : [{
        thickness : 10,
        outerRadius : "112%",
        from : 0,
        to : 2500,
        color : '#FB8585' // red
      }, {
        thickness : 10,
        outerRadius : "112%",
        from : 2500,
        to : 5500,
        color : '#F9E7AE' // yellow,
      }, {
        thickness : 10,
        outerRadius : "112%",
        from : 5500,
        to : 8000,
        color : '#83DAD9' // green
      }]
    },
    
    series : [{
      type : 'gauge',
      data : [settings.gaugeStartValue],
    }, {
      type : 'pie',
      innerSize : '87%',
      data : [{
        y : settings.gaugeStartValue,
        name : "",
        color : "#0bbeba"
      }, {
        y : settings.gaugeMaxValue - settings.gaugeStartValue,
        name : '',
        color : "#666666"
      }]
    }],
    
    navigation : {
      buttonOptions : {
        enabled : false
      }
    },
    
    credits : false
    };
    
    $('#gauge1').highcharts(options, buildGraph);
    
    function buildGraph(chart) {
    if (!chart.renderer.forExport) {
      setInterval(function () {
        var gaugePoint = chart.series[0].points[0],
          piePoint = chart.series[1],
          newVal,
          inc = Math.round((Math.random() - 0.5) * 1500);
    
        newVal = gaugePoint.y + inc;
        if (newVal < settings.gaugeMinValue || newVal > settings.gaugeMaxValue) {
          newVal = gaugePoint.y - inc;
        }
    
        // Update number gauge value
        gaugePoint.update(newVal);
    
        // Update pie with current value
        piePoint.points[0].update(newVal);
        piePoint.points[1].update(settings.gaugeMaxValue - newVal);
    
      }, settings.gaugeUpdateInterval);
      }
      }
      });