You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by wa...@apache.org on 2020/11/04 08:34:23 UTC

[incubator-echarts-examples] branch next updated: add gauge-car example

This is an automated email from the ASF dual-hosted git repository.

wangdd pushed a commit to branch next
in repository https://gitbox.apache.org/repos/asf/incubator-echarts-examples.git


The following commit(s) were added to refs/heads/next by this push:
     new 2338153  add gauge-car example
2338153 is described below

commit 23381536ea0c0102bde3a81d37713a013b3b843c
Author: Wdingding <wa...@gmail.com>
AuthorDate: Wed Nov 4 16:34:00 2020 +0800

    add gauge-car example
---
 public/data/gauge-car.js | 644 ++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 499 insertions(+), 145 deletions(-)

diff --git a/public/data/gauge-car.js b/public/data/gauge-car.js
index 8068ef4..6d40025 100644
--- a/public/data/gauge-car.js
+++ b/public/data/gauge-car.js
@@ -2,228 +2,582 @@
 title: Gauge Car
 category: gauge
 titleCN: Gauge Car
+difficulty: 8
 */
 
 option = {
+    backgroundColor: '#000',
     tooltip: {
-        formatter: "{a} <br/>{c} {b}"
+        formatter: '{a} <br/>{b} : {c}%'
     },
     toolbox: {
-        show: true,
         feature: {
-            restore: {show: true},
-            saveAsImage: {show: true}
+            restore: {},
+            saveAsImage: {}
         }
     },
-    series : [
+    series: [
+        // left
+        // 0
         {
-            name: '速度',
+            name: 'PORSCHE',
             type: 'gauge',
-            z: 3,
-            min: 0,
-            max: 220,
-            splitNumber: 11,
-            radius: '50%',
-            axisLine: {            // 坐标轴线
-                lineStyle: {       // 属性lineStyle控制线条样式
-                    width: 10
+            min: -200,
+            max: 250,
+            startAngle: -30,
+            endAngle: -315,
+            splitNumber: 9,
+            radius: '35%',
+            center: ['21%', '55%'],
+            axisLine: {
+                lineStyle: {
+                    color: [
+                        [1, '#AE96A6']
+                    ],
                 }
             },
-            axisTick: {            // 坐标轴小标记
-                length: 15,        // 属性length控制线长
-                lineStyle: {       // 属性lineStyle控制线条样式
-                    color: 'auto'
-                }
+            splitLine: {
+                show: false
             },
-            splitLine: {           // 分隔线
-                length: 20,         // 属性length控制线长
-                lineStyle: {       // 属性lineStyle(详见lineStyle)控制线条样式
-                    color: 'auto'
-                }
+            axisTick: {
+                show: false
             },
             axisLabel: {
-                backgroundColor: 'auto',
-                borderRadius: 2,
-                color: '#eee',
-                padding: 3,
-                textShadowBlur: 2,
-                textShadowOffsetX: 1,
-                textShadowOffsetY: 1,
-                textShadowColor: '#222'
+                show: false
             },
-            title: {
-                // 其余属性默认使用全局文本样式,详见TEXTSTYLE
-                fontWeight: 'bolder',
-                fontSize: 20,
-                fontStyle: 'italic'
+            anchor: {},
+            pointer: {
+                show: false
             },
             detail: {
-                // 其余属性默认使用全局文本样式,详见TEXTSTYLE
-                formatter: function (value) {
-                    value = (value + '').split('.');
-                    value.length < 2 && (value.push('00'));
-                    return ('00' + value[0]).slice(-2)
-                        + '.' + (value[1] + '00').slice(0, 2);
-                },
-                fontWeight: 'bolder',
-                borderRadius: 3,
-                backgroundColor: '#444',
-                borderColor: '#aaa',
-                shadowBlur: 5,
-                shadowColor: '#333',
-                shadowOffsetX: 0,
-                shadowOffsetY: 3,
-                borderWidth: 2,
-                textBorderColor: '#000',
-                textBorderWidth: 2,
-                textShadowBlur: 2,
-                textShadowColor: '#fff',
-                textShadowOffsetX: 0,
-                textShadowOffsetY: 0,
-                fontFamily: 'Arial',
-                width: 100,
-                color: '#eee',
-                rich: {}
-            },
-            data: [{value: 40, name: 'km/h'}]
+                show: false
+            },
+            title: {
+                fontSize: 12,
+                fontWeight: 800,
+                fontFamily: "Arial",
+                color: '#fff',
+                offsetCenter: [0, '-60%']
+            },
+            progress: {
+                show: true,
+                width: 3,
+                itemStyle: {
+                    color: '#fff'
+                }
+            },
+            data: [{
+                value: 250,
+                name: 'km/h'
+            }]
         },
+        // 1
         {
-            name: '转速',
+            name: 'PORSCHE',
             type: 'gauge',
-            center: ['20%', '55%'],    // 默认全局居中
-            radius: '35%',
             min: 0,
-            max: 7,
-            endAngle: 45,
-            splitNumber: 7,
-            axisLine: {            // 坐标轴线
-                lineStyle: {       // 属性lineStyle控制线条样式
-                    width: 8
+            max: 250,
+            startAngle: -140,
+            endAngle: -305,
+            splitNumber: 5,
+            radius: '35%',
+            center: ['21%', '55%'],
+            axisLine: {
+                lineStyle: {
+                    color: [
+                        [1, '#AE96A6']
+                    ],
                 }
             },
-            axisTick: {            // 坐标轴小标记
-                length: 12,        // 属性length控制线长
-                lineStyle: {       // 属性lineStyle控制线条样式
-                    color: 'auto'
+            splitLine: {
+                distance: -7,
+                length: 12,
+                lineStyle: {
+                    color: '#fff',
+                    width: 4
                 }
             },
-            splitLine: {           // 分隔线
-                length: 20,         // 属性length控制线长
-                lineStyle: {       // 属性lineStyle(详见lineStyle)控制线条样式
-                    color: 'auto'
+            axisTick: {
+                distance: -8,
+                length: 8,
+                lineStyle: {
+                    color: '#fff',
+                    width: 2
                 }
             },
+            axisLabel: {
+                distance: 20,
+                fontSize: 20,
+                fontWeight: 800,
+                fontFamily: "Arial",
+                color: '#fff'
+            },
+            anchor: {},
             pointer: {
-                width: 5
+                icon: 'path://M-36.5,23.9L-41,4.4c-0.1-0.4-0.4-0.7-0.7-0.7c-0.5-0.1-1.1,0.2-1.2,0.7l-4.5,19.5c0,0.1,0,0.1,0,0.2v92.3c0,0.6,0.4,1,1,1h9c0.6,0,1-0.4,1-1V24.1C-36.5,24-36.5,23.9-36.5,23.9z M-39.5,114.6h-5v-85h5V114.6z',
+                width: 5,
+                length: '40%',
+                offsetCenter: [0, '-58%'],
+                itemStyle: {
+                    color: '#f00',
+                    shadowColor: 'rgba(255, 0, 0)',
+                    shadowBlur: 5,
+                    shadowOffsetY: 2
+                }
             },
             title: {
-                offsetCenter: [0, '-30%'],       // x, y,单位px
+                color: '#fff',
+                fontSize: 15,
+                fontWeight: 800,
+                fontFamily: "Arial",
+                offsetCenter: [0, 0]
             },
             detail: {
-                // 其余属性默认使用全局文本样式,详见TEXTSTYLE
-                fontWeight: 'bolder'
+                show: false
             },
-            data: [{value: 1.5, name: 'x1000 r/min'}]
+            data: [{
+                value: 0,
+                name: '当前位置:\n \n 中科路'
+            }]
         },
+
+        // middle
+        // 2
         {
-            name: '油表',
+            name: 'PORSCHE',
             type: 'gauge',
-            center: ['77%', '50%'],    // 默认全局居中
-            radius: '25%',
             min: 0,
-            max: 2,
-            startAngle: 135,
-            endAngle: 45,
-            splitNumber: 2,
-            axisLine: {            // 坐标轴线
-                lineStyle: {       // 属性lineStyle控制线条样式
-                    width: 8
+            max: 8,
+            z: 10,
+            startAngle: 210,
+            endAngle: -30,
+            splitNumber: 8,
+            radius: '50%',
+            center: ['50%', '50%'],
+            axisLine: {
+                show: true,
+                lineStyle: {
+                    width: 0,
+                    color: [
+                        [0.825, '#fff'],
+                        [1, '#f00']
+                    ]
                 }
             },
-            axisTick: {            // 坐标轴小标记
-                splitNumber: 5,
-                length: 10,        // 属性length控制线长
-                lineStyle: {        // 属性lineStyle控制线条样式
-                    color: 'auto'
+            splitLine: {
+                distance: 20,
+                length: 15,
+                lineStyle: {
+                    color: 'auto',
+                    width: 4,
+                    shadowColor: 'rgba(255, 255, 255, 0.5)',
+                    shadowBlur: 15,
+                    shadowOffsetY: -10
+                }
+            },
+            axisTick: {
+                distance: 20,
+                length: 8,
+                lineStyle: {
+                    color: 'auto',
+                    width: 2,
+                    shadowColor: 'rgba(255, 255, 255)',
+                    shadowBlur: 10,
+                    shadowOffsetY: -10,
                 }
             },
             axisLabel: {
-                formatter: function (v){
-                    switch (v + '') {
-                        case '0' : return 'E';
-                        case '1' : return 'Gas';
-                        case '2' : return 'F';
-                    }
+                distance: 10,
+                fontSize: 35,
+                fontWeight: 800,
+                fontFamily: "Arial",
+                color: '#fff'
+            },
+            anchor: {},
+            pointer: {
+                icon: 'path://M-36.5,23.9L-41,4.4c-0.1-0.4-0.4-0.7-0.7-0.7c-0.5-0.1-1.1,0.2-1.2,0.7l-4.5,19.5c0,0.1,0,0.1,0,0.2v92.3c0,0.6,0.4,1,1,1h9c0.6,0,1-0.4,1-1V24.1C-36.5,24-36.5,23.9-36.5,23.9z M-39.5,114.6h-5v-85h5V114.6z',
+                width: 10,
+                offsetCenter: [0, '-10%'],
+                length: '75%',
+                itemStyle: {
+                    color: '#f00',
+                    shadowColor: 'rgba(255, 0, 0)',
+                    shadowBlur: 5,
+                    shadowOffsetY: 3
                 }
             },
-            splitLine: {           // 分隔线
-                length: 15,         // 属性length控制线长
-                lineStyle: {       // 属性lineStyle(详见lineStyle)控制线条样式
-                    color: 'auto'
+            title: {
+                color: '#fff',
+                fontSize: 12,
+                fontWeight: 800,
+                fontFamily: "Arial",
+                offsetCenter: [0, '-50%']
+            },
+            data: [{
+                value: 0.6,
+                name: '1/min x 1000'
+            }],
+            detail: {
+                show: false
+            }
+        },
+        // 3
+        {
+            name: 'PORSCHE',
+            type: 'gauge',
+            min: 0,
+            max: 8,
+            z: 10,
+            splitNumber: 8,
+            radius: '50%',
+            axisLine: {
+                lineStyle: {
+                    width: 14,
+                    color: [
+                        [1, '#000']
+                    ],
                 }
             },
+            splitLine: {
+                show: false
+            },
+            axisTick: {
+                show: false
+            },
+            axisLabel: {
+                show: false
+            },
+            anchor: {},
             pointer: {
-                width: 2
+                show: false
             },
             title: {
                 show: false
             },
             detail: {
+                offsetCenter: ['25%', '50%'],
+                formatter: '{a|{value}}{b|km/h}',
+                rich: {
+                    a: {
+                        fontSize: 60,
+                        fontWeight: 800,
+                        fontFamily: "Arial",
+                        color: '#fff',
+                        align: 'center',
+                        padding: [0, 5, 0, 0]
+                    },
+                    b: {
+                        fontSize: 14,
+                        fontWeight: 800,
+                        fontFamily: "Arial",
+                        color: '#fff',
+                        rotate: 30,
+                        padding: [0, 0, 20, 0]
+                    }
+                }
+            },
+            // value is speed
+            data: [{
+                value: 0,
+                name: ''
+            }]
+        },
+        // right
+        // 4
+        {
+            name: 'PORSCHE',
+            type: 'gauge',
+            min: 0,
+            max: 8,
+            startAngle: 135,
+            endAngle: -150,
+            splitNumber: 8,
+            radius: '35%',
+            center: ['79%', '55%'],
+            axisLine: {
+                lineStyle: {
+                    color: [
+                        [1, '#AE96A6']
+                    ],
+                }
+            },
+            splitLine: {
+                show: false
+            },
+            axisTick: {
                 show: false
             },
-            data: [{value: 0.5, name: 'gas'}]
+            axisLabel: {
+                show: false
+            },
+            anchor: {},
+            pointer: {
+                show: false
+            },
+            title: {},
+            detail: {
+                offsetCenter: ['-15%', 0],
+                formatter: [
+                    '{a|                  00:00}',
+                    '{a|行驶时间       0:00}{b| h}',
+                    '{a|行驶距离        0.0}{b| km}',
+                    '{a|平均耗能        ---}{b| 1/100km}',
+                    '{a|平均速度        ---}{b| km/h}'
+                ].join('\n'),
+                rich: {
+                    a: {
+                        fontSize: 14,
+                        fontWeight: 800,
+                        fontFamily: "Arial",
+                        lineHeight: 22,
+                        color: '#fff',
+                        align: 'left'
+                    },
+                    b: {
+                        fontWeight: 600,
+                        fontFamily: "Arial",
+                        lineHeight: 22,
+                        color: '#fff',
+                        align: 'left'
+                    }
+                }
+            },
+            progress: {
+                show: true,
+                width: 3,
+                itemStyle: {
+                    color: '#fff'
+                }
+            },
+            data: [{
+                value: 250,
+                name: ''
+            }]
         },
+        // 5
         {
-            name: '水表',
+            name: 'PORSCHE',
             type: 'gauge',
-            center: ['77%', '50%'],    // 默认全局居中
-            radius: '25%',
             min: 0,
-            max: 2,
-            startAngle: 315,
-            endAngle: 225,
+            max: 1,
+            startAngle: 125,
+            endAngle: 55,
             splitNumber: 2,
-            axisLine: {            // 坐标轴线
-                lineStyle: {       // 属性lineStyle控制线条样式
-                    width: 8
+            radius: '34%',
+            center: ['79%', '55.3%'],
+            axisLine: {
+                lineStyle: {
+                    width: 9,
+                    color: [
+                        [0.15, '#f00'],
+                        [1, 'rgba(255, 0, 0, 0)']
+                    ],
                 }
             },
-            axisTick: {            // 坐标轴小标记
-                show: false
+            splitLine: {
+                distance: -14,
+                length: 16,
+                lineStyle: {
+                    color: '#fff',
+                    width: 4
+                }
+            },
+            axisTick: {
+                distance: -14,
+                length: 10,
+                lineStyle: {
+                    color: '#fff',
+                    width: 2
+                }
             },
             axisLabel: {
-                formatter: function(v){
-                    switch (v + '') {
-                        case '0' : return 'H';
-                        case '1' : return 'Water';
-                        case '2' : return 'C';
+                distance: 20,
+                fontSize: 20,
+                fontWeight: 800,
+                fontFamily: "Arial",
+                color: '#fff',
+                formatter: function(value) {
+                    if (value === 0.5) {
+                        return '2/4';
+                    }
+                    if (value === 1) {
+                        return '4/4';
                     }
+                    return value;
                 }
             },
-            splitLine: {           // 分隔线
-                length: 15,         // 属性length控制线长
-                lineStyle: {       // 属性lineStyle(详见lineStyle)控制线条样式
-                    color: 'auto'
+            progress: {
+                show: true,
+                width: 5,
+                itemStyle: {
+                    color: '#fff'
                 }
             },
-            pointer: {
-                width:2
+            anchor: {
+                show: true,
+                itemStyle: {},
+                offsetCenter: ['-22%', '-57%'],
+                size: 18,
+                icon: 'path://M1.11979167,1.11111112 C1.11979167,0.497461393 1.61725306,0 2.23090279,0 L12.2309028,0 C12.8445525,1.43824153e-08 13.3420139,0.497461403 13.3420139,1.11111112 L13.3420139,10 L15.5642361,10 C16.7915356,10 17.7864583,10.9949228 17.7864583,12.2222222 L17.7864583,16.6666667 C17.7865523,17.28025 18.2839861,17.7776077 18.8975694,17.7776077 C19.5111527,17.7776077 20.0085866,17.28025 20.0086805,16.6666667 L20.0086805,8.88888888 L17.7864583,8.88888888 C17.1728086,8.8 [...]
             },
-            title: {
+            pointer: {
                 show: false
             },
+            title: {},
+            detail: {
+                offsetCenter: ['10%', '-56%'],
+                formatter: '{a|831}{b| km}',
+                rich: {
+                    a: {
+                        fontSize: 15,
+                        fontWeight: 800,
+                        fontFamily: "Arial",
+                        color: '#fff'
+                    },
+                    b: {
+                        fontWeight: 600,
+                        fontFamily: "Arial",
+                        color: '#fff'
+                    }
+                }
+            },
+            data: [{
+                value: 0.85,
+                name: ''
+            }]
+        },
+        // 6
+        {
+            name: 'PORSCHE',
+            type: 'gauge',
+            min: -120,
+            max: -60,
+            startAngle: 230,
+            endAngle: 310,
+            clockwise: false,
+            splitNumber: 2,
+            radius: '35%',
+            center: ['79%', '55%'],
+            axisLine: {
+                lineStyle: {
+                    color: [
+                        [1, '#AE96A6'],
+                        [1.1, '#f00']
+                    ],
+                }
+            },
+            splitLine: {
+                distance: -8,
+                length: 12,
+                lineStyle: {
+                    color: '#fff',
+                    width: 4
+                }
+            },
+            axisTick: {
+                splitNumber: 3,
+                length: 8,
+                distance: -8,
+                lineStyle: {
+                    color: '#fff',
+                    width: 2
+                }
+            },
+            axisLabel: {
+                distance: 20,
+                fontSize: 20,
+                fontWeight: 800,
+                fontFamily: "Arial",
+                color: '#fff',
+                formatter: function(value) {
+                    return -value
+                }
+            },
+            anchor: {
+                show: true,
+                itemStyle: {},
+                offsetCenter: [0, '55%'],
+                size: 20,
+                icon: 'path://M-34.1-1.1L-34.1-1.1c0-0.3-0.3-0.6-0.6-0.6h-3.6v-1.5c0-0.5-0.2-0.9-0.6-1.1s-0.9-0.2-1.3,0c-0.4,0.2-0.6,0.7-0.6,1.1V7.9c0,0,0,0.1,0,0.1c-0.8,0.5-1.2,1.5-0.9,2.5c0.3,0.9,1.1,1.6,2.1,1.6c1,0,1.8-0.6,2.1-1.5c0.3-0.9,0-1.9-0.8-2.5V6.3h3.5c0.4,0,0.7-0.3,0.7-0.7l0,0c0-0.4-0.3-0.7-0.7-0.7h-3.5V2.9h3.5c0.4,0,0.7-0.3,0.7-0.7l0,0c0-0.4-0.3-0.7-0.7-0.7h-3.5v-2.1h3.6C-34.4-0.5-34.1-0.8-34.1-1.1z M-44.9,11.6c-0.7,0-1.4-0.2-2-0.6c-0.4-0.3-0.9-0.4-1.4-0.4c-0.4,0-0.9,0.2-1.2 [...]
+            },
+            pointer: {
+                icon: 'path://M2.9,0.7L2.9,0.7c1.4,0,2.6,1.2,2.6,2.6v115c0,1.4-1.2,2.6-2.6,2.6l0,0c-1.4,0-2.6-1.2-2.6-2.6V3.3C0.3,1.9,1.4,0.7,2.9,0.7z',
+                width: 15,
+                length: '4',
+                offsetCenter: [0, '-90%'],
+                itemStyle: {
+                    color: '#f00'
+                }
+            },
+            title: {},
             detail: {
                 show: false
             },
-            data: [{value: 0.5, name: 'gas'}]
+            data: [{
+                value: -120,
+                name: ''
+            }]
         }
     ]
 };
 
-setInterval(function (){
-    option.series[0].data[0].value = (Math.random()*100).toFixed(2) - 0;
-    option.series[1].data[0].value = (Math.random()*7).toFixed(2) - 0;
-    option.series[2].data[0].value = (Math.random()*2).toFixed(2) - 0;
-    option.series[3].data[0].value = (Math.random()*2).toFixed(2) - 0;
-    myChart.setOption(option,true);
-},2000);
\ No newline at end of file
+myChart.setOption(option, true);
+
+function generateRandom(lower, upper, fixed) {
+    return (Math.random() * (upper - lower + 1) + lower).toFixed(fixed) - 0;
+}
+
+function createFormatter(moveTime, moveDistance, avgEnergy, avgSpeed) {
+    console.log();
+    const date = new Date();
+    let hour = date.getHours();
+    let minite = date.getMinutes()
+    let time = (hour < 10 ? '0' + hour : hour) + ':' + (minite < 10 ? '0' + minite : minite);
+    moveTime < 10 && (moveTime = '0' + moveTime);
+    return [
+        `{a|                  ${time}}`,
+        `{a|行驶时间        ${'0:' + moveTime}}{b| h}`,
+        `{a|行驶距离        ${moveDistance}}{b| km}`,
+        `{a|平均耗能        ${avgEnergy}}{b| 1/100km}`,
+        `{a|平均速度        ${avgSpeed}}{b| km/h}`
+    ].join('\n');
+}
+
+const interval = 2;
+let moveTime = 0;
+let moveDistance = 0;
+let avgEnergy = 0;
+let avgSpeed = 0;
+let minite = 0;
+setInterval(function() {
+    let speed = generateRandom(70, 80, 0);
+    option.series[1].data[0].value = speed;
+    option.series[3].data[0].value = speed;
+    let rotatingSpeed = generateRandom(2.5, 3, 1);
+    option.series[2].data[0].value = rotatingSpeed;
+    option.series[6].data[0].value = -generateRandom(105, 115, 0);
+
+    moveTime += interval;
+    if (moveTime % 60 === 0) {
+        minite++;
+        if (minite > 30) {
+            moveTime = 2;
+            moveDistance = 0;
+            avgEnergy = 0;
+            avgSpeed = 0;
+            minite = 0;
+            // oil
+            if (option.series[5].data[0].value > 0.3) {
+                option.series[5].data[0].value -= 0.1;
+            } else {
+                option.series[5].data[0].value = 1;
+            }
+        }
+    }
+    // mock value
+    moveDistance += interval / 3600 * speed;
+    avgSpeed = moveDistance / (moveTime / 3600);
+    avgEnergy = 85 * avgSpeed;
+    option.series[4].detail.formatter = createFormatter(minite, moveDistance.toFixed(1), avgEnergy.toFixed(0), avgSpeed.toFixed(0));
+    myChart.setOption(option, true);
+}, 2000);
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org