JS 中心归零仪表图
JS Centre-Zeroed Gauge Chart
我一直在将 Highcharts 用于我一直在构建的 Web 应用程序,并且到目前为止证明它们很棒。但现在我的任务是为一些数据创建一个仪表,如下所示:
而且我找不到任何图表库可以很好地呈现居中归零仪表(从中心填充到指针摆动的位置)。
有人对库或自定义实现有任何建议吗?
(P.S。我需要作为其基础的示例量规来自 PDF 报告,因此没有机会进行任何逆向工程)
这里有一些你可以尝试的东西: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);
}
}
});
我一直在将 Highcharts 用于我一直在构建的 Web 应用程序,并且到目前为止证明它们很棒。但现在我的任务是为一些数据创建一个仪表,如下所示:
而且我找不到任何图表库可以很好地呈现居中归零仪表(从中心填充到指针摆动的位置)。
有人对库或自定义实现有任何建议吗?
(P.S。我需要作为其基础的示例量规来自 PDF 报告,因此没有机会进行任何逆向工程)
这里有一些你可以尝试的东西: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); } } });