• HighCharts 嵌套仪表盘


    效果图

    在这里插入图片描述

    要点

    • 使用多个DIV绘制不同表盘,并设置背景色透明以叠加
    chart: {
        backgroundColor: 'rgba(0,0,0,0)'
    },
    

    源码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="resources/js/highcharts.js"></script>
        <script src="resources/js/highcharts-more.js"></script>
        <script src="resources/js/solid-gauge.js"></script>
        <script>
            function render() {
                const boxW = 300, boxH = 300,
                    axisFontW = 13;
                Highcharts.setOptions({
                    title: null,
                    tooltip: {
                        enabled: false
                    },
                    plotOptions: {
                        solidgauge: {
                            dataLabels: {
                                y: 5,
                                borderWidth: 0,
                                useHTML: true
                            }
                        }
                    }
                });
                var chart1 = Highcharts.chart('container-1', {
                    chart: {
                        type: 'solidgauge',
                        backgroundColor: 'rgba(0,0,0,0)'
                    },
                    pane: {
                        center: ['50%', '50%'],
                        size: '100%',
                        startAngle: -135,
                        endAngle: -45,
                        background: [{
                            backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || '#EEE',
                            innerRadius: '90%',
                            outerRadius: '100%',
                            shape: 'arc'
                        }]
                    },
                    yAxis: [{
                        min: 0,
                        max: 200,
                        lineWidth: 0,
                        minorTickInterval: null,
                        tickPixelInterval: 400,
                        tickWidth: 0,
                        title: {
                            text: '载荷',
                            x: -boxW / 2 + axisFontW
                        },
                        stops: [
                            [0.1, '#DF5353'], // red
                            [0.3, '#DDDF0D'], // yellow
                            [0.5, '#55BF3B'], // green
                            [0.7, '#DDDF0D'], // yellow
                            [0.9, '#DF5353'] // red
                        ]
                    }],
                    credits: {
                        enabled: false
                    },
                    series: [{
                        name: '载荷',
                        data: [{
                            radius: '100%',
                            innerRadius: '90%',
                            y: 100
                        }],
                        dataLabels: {
                            align: 'center',
                            x: -boxW / 2,
                            y: boxH / 4,
                            format: '<div style="text-align:center"><span style="font-size:16px;color:' +
                                ((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '">{y}</span>' +
                                '<span style="font-size:12px;color:silver">%</span></div>'
                        },
                        tooltip: {
                            valueSuffix: ' %'
                        }
                    }]
                });
                var chart2 = Highcharts.chart('container-2', {
                    chart: {
                        type: 'solidgauge',
                        backgroundColor: 'rgba(0,0,0,0)'
                    },
                    pane: {
                        center: ['50%', '50%'],
                        size: '100%',
                        startAngle: 135,
                        endAngle: 45,
                        background: [{
                            backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || '#EEE',
                            innerRadius: '90%',
                            outerRadius: '100%',
                            shape: 'arc'
                        }]
                    },
                    yAxis: [{
                        min: 0,
                        max: 200,
                        lineWidth: 0,
                        minorTickInterval: null,
                        tickPixelInterval: 400,
                        tickWidth: 0,
                        title: {
                            text: '编制',
                            x: boxW / 2 - axisFontW * 1.5
                        },
                        stops: [
                            [0.1, '#DF5353'], // red
                            [0.3, '#DDDF0D'], // yellow
                            [0.5, '#55BF3B'], // green
                            [0.7, '#DDDF0D'], // yellow
                            [0.9, '#DF5353'] // red
                        ]
                    }],
                    credits: {
                        enabled: false
                    },
                    series: [{
                        name: '编制',
                        data: [{
                            radius: '100%',
                            innerRadius: '90%',
                            y: 100
                        }],
                        dataLabels: {
                            align: 'center',
                            x: boxW / 2,
                            y: boxH / 4,
                            format: '<div style="text-align:center"><span style="font-size:16px;color:' +
                                ((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '">{y}</span>' +
                                '<span style="font-size:12px;color:silver">%</span></div>'
                        },
                        tooltip: {
                            valueSuffix: ' %'
                        }
                    }]
                });
                var chart3 = Highcharts.chart('container-3', {
                    chart: {
                        type: 'gauge',
                        plotBackgroundColor: null,
                        plotBackgroundImage: null,
                        plotBorderWidth: 0,
                        plotShadow: false,
                        backgroundColor: 'rgba(0,0,0,0)'
                    },
                    pane: {
                        center: ['50%', '50%'],
                        size: '70%',
                        startAngle: -120,
                        endAngle: 120,
                        background: [{
                            backgroundColor: {
                                linearGradient: {x1: 0, y1: 0, x2: 0, y2: 1},
                                stops: [
                                    [0, '#FFF'],
                                    [1, '#333']
                                ]
                            },
                            borderWidth: 0,
                            outerRadius: '106%'
                        }, {
                            backgroundColor: {
                                linearGradient: {x1: 0, y1: 0, x2: 0, y2: 1},
                                stops: [
                                    [0, '#333'],
                                    [1, '#FFF']
                                ]
                            },
                            borderWidth: 1,
                            outerRadius: '104%'
                        }, {
                            outerRadius: '104%'
                        }, {
                            backgroundColor: '#DDD',
                            borderWidth: 0,
                            outerRadius: '102%',
                            innerRadius: '100%'
                        }]
                    },
                    yAxis: [{
                        min: 0,
                        max: 200,
                        minorTickInterval: 'auto',
                        minorTickWidth: 1,
                        minorTickLength: 10,
                        minorTickPosition: 'inside',
                        minorTickColor: '#666',
                        tickPixelInterval: 30,
                        tickWidth: 2,
                        tickPosition: 'inside',
                        tickLength: 10,
                        tickColor: '#666',
                        labels: {
                            step: 2,
                            rotation: 'auto'
                        },
                        title: {
                            text: '效率'
                        },
                        plotBands: [{
                            from: 0,
                            to: 40,
                            color: '#DF5353' // red
                        }, {
                            from: 40,
                            to: 80,
                            color: '#DDDF0D' // yellow
                        }, {
                            from: 80,
                            to: 120,
                            color: '#55BF3B' // green
                        }, {
                            from: 120,
                            to: 160,
                            color: '#DDDF0D' // yellow
                        }, {
                            from: 160,
                            to: 200,
                            color: '#DF5353' // red
                        }]
                    }],
                    credits: {
                        enabled: false
                    },
                    series: [{
                        name: '效率',
                        data: [{
                            radius: '100%',
                            innerRadius: '90%',
                            y: 0
                        }],
                        dataLabels: {
                            align: 'center',
                            format: '<div style="text-align:center"><span style="font-size:16px;color:' +
                                ((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '">{y}</span>' +
                                '<span style="font-size:12px;color:silver">%</span></div>'
                        },
                        tooltip: {
                            valueSuffix: ' %'
                        }
                    }]
                });
                // 定时刷新数据
                setInterval(function () {
                    var point,
                        newVal,
                        inc,
                        v1, v2;
                    if (chart1) {
                        point = chart1.series[0].points[0];
                        inc = Math.round((Math.random() - 0.5) * 10);
                        newVal = point.y + inc;
                        if (newVal < 0 || newVal > 200) {
                            newVal = point.y - inc;
                        }
                        point.update(newVal);
                        v1 = point.y;
                    }
                    if (chart2) {
                        point = chart2.series[0].points[0];
                        inc = Math.round((Math.random() - 0.5) * 10);
                        newVal = point.y + inc;
                        if (newVal < 0 || newVal > 200) {
                            newVal = point.y - inc;
                        }
                        point.update(newVal);
                        v2 = point.y;
                    }
                    if (chart3) {
                        point = chart3.series[0].points[0];
                        inc = Math.round((Math.random() - 0.5) * 10);
                        newVal = Math.round(100 * v1 / v2);
                        if (newVal < 0) {
                            newVal = 0;
                        } else if (newVal > 200) {
                            newVal = 200;
                        }
                        point.update(newVal);
                    }
                }, 100);
            }
        </script>
    </head>
    <body onload="render()">
    	<div style="width: 300px; height: 300px; margin: auto">
    	    <div id="container-1" style="position: absolute;width: 300px; height: 300px; float: left"></div>
    	    <div id="container-2" style="position: absolute;width: 300px; height: 300px; float: left"></div>
    	    <div id="container-3" style="position: absolute;width: 300px; height: 300px; float: left"></div>
    	</div>
    </body>
    </html>
    
  • 相关阅读:
    六种常见排序算法的自我研究(冒泡排序,选择排序,快速排序,归并排序,插入排序,堆排序)
    设计模式学习总结(二)工厂模式
    SQL Server Reporting Service(SSRS) 第七篇 常见错误汇总
    SQL Server Reporting Service(SSRS) 第六篇 SSRS 部署总结
    设计模式学习总结(一)简单工厂模式
    设计模式学习总结(三)抽象工厂模式
    设计模式学习总结(四)单例模式
    SQL Server覆盖索引--有无包含列对数据库查询性能的影响分析
    Dev Express Report 学习总结(八)Dev Express Reports 常见问题总结
    docker命令笔记
  • 原文地址:https://www.cnblogs.com/luguojun/p/14294663.html
Copyright © 2020-2023  润新知