WIP: add more ts examples
diff --git a/public/examples/ts/funnel-customize.ts b/public/examples/ts/funnel-customize.ts
new file mode 100644
index 0000000..229ae83
--- /dev/null
+++ b/public/examples/ts/funnel-customize.ts
@@ -0,0 +1,89 @@
+/*
+title: Customized Funnel
+category: funnel
+titleCN: 漏斗图
+*/
+
+option = {
+    title: {
+        text: 'Funnel'
+    },
+    tooltip: {
+        trigger: 'item',
+        formatter: "{a} <br/>{b} : {c}%"
+    },
+    toolbox: {
+        feature: {
+            dataView: {readOnly: false},
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    legend: {
+        data: ['Show','Click','Visit','Inquiry','Order']
+    },
+    series: [
+        {
+            name: 'Expected',
+            type: 'funnel',
+            left: '10%',
+            width: '80%',
+            label: {
+                formatter: '{b}Expected'
+            },
+            labelLine: {
+                show: false
+            },
+            itemStyle: {
+                opacity: 0.7
+            },
+            emphasis: {
+                label: {
+                    position: 'inside',
+                    formatter: '{b}Expected: {c}%'
+                }
+            },
+            data: [
+                {value: 60, name: 'Visit'},
+                {value: 40, name: 'Inquiry'},
+                {value: 20, name: 'Order'},
+                {value: 80, name: 'Click'},
+                {value: 100, name: 'Show'}
+            ]
+        },
+        {
+            name: 'Actual',
+            type: 'funnel',
+            left: '10%',
+            width: '80%',
+            maxSize: '80%',
+            label: {
+                position: 'inside',
+                formatter: '{c}%',
+                color: '#fff'
+            },
+            itemStyle: {
+                opacity: 0.5,
+                borderColor: '#fff',
+                borderWidth: 2
+            },
+            emphasis: {
+                label: {
+                    position: 'inside',
+                    formatter: '{b}Actual: {c}%'
+                }
+            },
+            data: [
+                {value: 30, name: 'Visit'},
+                {value: 10, name: 'Inquiry'},
+                {value: 5, name: 'Order'},
+                {value: 50, name: 'Click'},
+                {value: 80, name: 'Show'}
+            ],
+            // Ensure outer shape will not be over inner shape when hover.
+            z: 100
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/funnel-mutiple.ts b/public/examples/ts/funnel-mutiple.ts
new file mode 100644
index 0000000..6b5b9f6
--- /dev/null
+++ b/public/examples/ts/funnel-mutiple.ts
@@ -0,0 +1,104 @@
+/*
+title: Multiple Funnels
+category: funnel
+titleCN: Funnel
+*/
+
+option = {
+    title: {
+        text: 'Funnel',
+        left: 'left',
+        top: 'bottom'
+    },
+    tooltip: {
+        trigger: 'item',
+        formatter: '{a} <br/>{b} : {c}%'
+    },
+    toolbox: {
+        orient: 'vertical',
+        top: 'center',
+        feature: {
+            dataView: {readOnly: false},
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    legend: {
+        orient: 'vertical',
+        left: 'left',
+        data: ['Show', 'Click', 'Visit', 'Inquiry', 'Order']
+    },
+
+    series: [
+        {
+            name: 'Funnel',
+            type: 'funnel',
+            width: '40%',
+            height: '45%',
+            left: '5%',
+            top: '50%',
+            data: [
+                {value: 60, name: 'Visit'},
+                {value: 30, name: 'Inquiry'},
+                {value: 10, name: 'Order'},
+                {value: 80, name: 'Click'},
+                {value: 100, name: 'Show'}
+            ]
+        },
+        {
+            name: 'Pyramid',
+            type: 'funnel',
+            width: '40%',
+            height: '45%',
+            left: '5%',
+            top: '5%',
+            sort: 'ascending',
+            data: [
+                {value: 60, name: 'Visit'},
+                {value: 30, name: 'Inquiry'},
+                {value: 10, name: 'Order'},
+                {value: 80, name: 'Click'},
+                {value: 100, name: 'Show'}
+            ]
+        },
+        {
+            name: 'Funnel',
+            type: 'funnel',
+            width: '40%',
+            height: '45%',
+            left: '55%',
+            top: '5%',
+            label: {
+                position: 'left'
+            },
+            data: [
+                {value: 60, name: 'Visit'},
+                {value: 30, name: 'Inquiry'},
+                {value: 10, name: 'Order'},
+                {value: 80, name: 'Click'},
+                {value: 100, name: 'Show'}
+            ]
+        },
+        {
+            name: 'Pyramid',
+            type: 'funnel',
+            width: '40%',
+            height: '45%',
+            left: '55%',
+            top: '50%',
+            sort: 'ascending',
+            label: {
+                position: 'left'
+            },
+            data: [
+                {value: 60, name: 'Visit'},
+                {value: 30, name: 'Inquiry'},
+                {value: 10, name: 'Order'},
+                {value: 80, name: 'Click'},
+                {value: 100, name: 'Show'}
+            ]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/funnel.ts b/public/examples/ts/funnel.ts
new file mode 100644
index 0000000..f31dee6
--- /dev/null
+++ b/public/examples/ts/funnel.ts
@@ -0,0 +1,69 @@
+/*
+title: Funnel Chart
+category: funnel
+titleCN: 漏斗图
+*/
+
+option = {
+    title: {
+        text: 'Funnel'
+    },
+    tooltip: {
+        trigger: 'item',
+        formatter: "{a} <br/>{b} : {c}%"
+    },
+    toolbox: {
+        feature: {
+            dataView: {readOnly: false},
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    legend: {
+        data: ['Show','Click','Visit','Inquiry','Order']
+    },
+
+    series: [
+        {
+            name:'Funnel',
+            type:'funnel',
+            left: '10%',
+            top: 60,
+            bottom: 60,
+            width: '80%',
+            min: 0,
+            max: 100,
+            minSize: '0%',
+            maxSize: '100%',
+            sort: 'descending',
+            gap: 2,
+            label: {
+                show: true,
+                position: 'inside'
+            },
+            labelLine: {
+                length: 10,
+                lineStyle: {
+                    width: 1,
+                    type: 'solid'
+                }
+            },
+            itemStyle: {
+                borderColor: '#fff',
+                borderWidth: 1
+            },
+            emphasis: {
+                label: {
+                    fontSize: 20
+                }
+            },
+            data: [
+                {value: 60, name: 'Visit'},
+                {value: 40, name: 'Inquiry'},
+                {value: 20, name: 'Order'},
+                {value: 80, name: 'Click'},
+                {value: 100, name: 'Show'}
+            ]
+        }
+    ]
+};
diff --git a/public/examples/ts/gauge-barometer.ts b/public/examples/ts/gauge-barometer.ts
new file mode 100644
index 0000000..167c818
--- /dev/null
+++ b/public/examples/ts/gauge-barometer.ts
@@ -0,0 +1,129 @@
+/*
+title: Gauge Barometer chart
+titleCN: 气压表
+category: gauge
+difficulty: 6
+*/
+
+option = {
+    series: [{
+        type: 'gauge',
+        min: 0,
+        max: 100,
+        splitNumber: 10,
+        radius: '80%',
+        axisLine: {
+            lineStyle: {
+                color: [
+                    [1, '#f00']
+                ],
+                width: 3
+            }
+        },
+        splitLine: {
+            distance: -18,
+            length: 18,
+            lineStyle: {
+                color: '#f00'
+            }
+        },
+        axisTick: {
+            distance: -12,
+            length: 10,
+            lineStyle: {
+                color: '#f00'
+            }
+        },
+        axisLabel: {
+            distance: -50,
+            color: '#f00',
+            fontSize: 25
+        },
+        anchor: {
+            show: true,
+            size: 20,
+            itemStyle: {
+                borderColor: '#000',
+                borderWidth: 2
+            }
+        },
+        pointer: {
+            offsetCenter: [0, '10%'],
+            icon: 'path://M2090.36389,615.30999 L2090.36389,615.30999 C2091.48372,615.30999 2092.40383,616.194028 2092.44859,617.312956 L2096.90698,728.755929 C2097.05155,732.369577 2094.2393,735.416212 2090.62566,735.56078 C2090.53845,735.564269 2090.45117,735.566014 2090.36389,735.566014 L2090.36389,735.566014 C2086.74736,735.566014 2083.81557,732.63423 2083.81557,729.017692 C2083.81557,728.930412 2083.81732,728.84314 2083.82081,728.755929 L2088.2792,617.312956 C2088.32396,616.194028 2089.24407,615.30999 2090.36389,615.30999 Z',
+            length: '115%',
+            itemStyle: {
+                color: '#000'
+            }
+        },
+        detail: {
+            valueAnimation: true,
+            precision: 1
+        },
+        title: {
+            offsetCenter: [0, '-50%']
+        },
+        data: [{
+            value: 58.46,
+            name: 'PLP低压计'
+        }]
+    },
+    {
+        type: 'gauge',
+        min: 0,
+        max: 60,
+        splitNumber: 6,
+        axisLine: {
+            lineStyle: {
+                color: [
+                    [1, '#000']
+                ],
+                width: 3
+            }
+        },
+        splitLine: {
+            distance: -3,
+            length: 18,
+            lineStyle: {
+                color: '#000'
+            }
+        },
+        axisTick: {
+            distance: 0,
+            length: 10,
+            lineStyle: {
+                color: '#000'
+            }
+        },
+        axisLabel: {
+            distance: 10,
+            fontSize: 25,
+            color: '#000'
+        },
+        pointer: {
+            show: false
+        },
+        title: {
+            show: false
+        },
+        anchor: {
+            show: true,
+            size: 14,
+            itemStyle: {
+                color: '#000'
+            }
+        }
+    }]
+};
+setInterval(function () {
+    myChart.setOption<echarts.EChartsOption>({
+        series: [{
+            type: 'gauge',
+            data: [{
+                value: +(Math.random() * 100).toFixed(2),
+                name: 'PLP低压计'
+            }]
+        }]
+    });
+}, 2000);
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/gauge-car.ts b/public/examples/ts/gauge-car.ts
new file mode 100644
index 0000000..5fad2f8
--- /dev/null
+++ b/public/examples/ts/gauge-car.ts
@@ -0,0 +1,515 @@
+/*
+title: Gauge Car
+category: gauge
+titleCN: Gauge Car
+difficulty: 8
+*/
+
+option = {
+    backgroundColor: '#000',
+    tooltip: {
+        formatter: '{a} <br/>{b} : {c}%'
+    },
+    toolbox: {
+        feature: {
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    series: [
+        // left
+        {
+            name: 'gauge 0',
+            type: 'gauge',
+            min: -200,
+            max: 250,
+            startAngle: -30,
+            endAngle: -315,
+            splitNumber: 9,
+            radius: '35%',
+            center: ['21%', '55%'],
+            axisLine: {
+                lineStyle: {
+                    color: [
+                        [1, '#AE96A6']
+                    ],
+                }
+            },
+            splitLine: {
+                show: false
+            },
+            axisTick: {
+                show: false
+            },
+            axisLabel: {
+                show: false
+            },
+            anchor: {},
+            pointer: {
+                show: false
+            },
+            detail: {
+                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'
+            }]
+        },
+        {
+            name: 'gauge 1',
+            type: 'gauge',
+            min: 0,
+            max: 250,
+            startAngle: -140,
+            endAngle: -305,
+            splitNumber: 5,
+            radius: '35%',
+            center: ['21%', '55%'],
+            axisLine: {
+                lineStyle: {
+                    color: [
+                        [1, '#AE96A6']
+                    ],
+                }
+            },
+            splitLine: {
+                distance: -7,
+                length: 12,
+                lineStyle: {
+                    color: '#fff',
+                    width: 4
+                }
+            },
+            axisTick: {
+                distance: -8,
+                length: 8,
+                lineStyle: {
+                    color: '#fff',
+                    width: 2
+                }
+            },
+            axisLabel: {
+                distance: 14,
+                fontSize: 18,
+                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: 5,
+                length: '40%',
+                offsetCenter: [0, '-58%'],
+                itemStyle: {
+                    color: '#f00',
+                    shadowColor: 'rgba(255, 0, 0)',
+                    shadowBlur: 5,
+                    shadowOffsetY: 2
+                }
+            },
+            title: {
+                color: '#fff',
+                fontSize: 14,
+                fontWeight: 800,
+                fontFamily: "Arial",
+                offsetCenter: [0, 0]
+            },
+            detail: {
+                show: false
+            },
+            data: [{
+                value: 0,
+                name: '当前位置:\n \n 中科路'
+            }]
+        },
+        // middle
+        {
+            name: 'gauge 2',
+            type: 'gauge',
+            min: 0,
+            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']
+                    ]
+                }
+            },
+            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: {
+                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
+                }
+            },
+            title: {
+                color: '#fff',
+                fontSize: 12,
+                fontWeight: 800,
+                fontFamily: "Arial",
+                offsetCenter: [0, '-50%']
+            },
+            data: [{
+                value: 0.6,
+                name: '1/min x 1000'
+            }],
+            detail: {
+                show: false
+            }
+        },
+        {
+            name: 'gauge 3',
+            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: {
+                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',
+                        padding: [0, 0, 20, 0]
+                    }
+                }
+            },
+            // value is speed
+            data: [{
+                value: 0,
+                name: ''
+            }]
+        },
+        // right
+        {
+            name: 'gauge 4',
+            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
+            },
+            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: ''
+            }]
+        },
+        {
+            name: 'gauge 5',
+            type: 'gauge',
+            min: 0,
+            max: 1,
+            startAngle: 125,
+            endAngle: 55,
+            splitNumber: 2,
+            radius: '34%',
+            center: ['79%', '55.3%'],
+            axisLine: {
+                lineStyle: {
+                    width: 9,
+                    color: [
+                        [0.15, '#f00'],
+                        [1, 'rgba(255, 0, 0, 0)']
+                    ],
+                }
+            },
+            splitLine: {
+                distance: -14,
+                length: 16,
+                lineStyle: {
+                    color: '#fff',
+                    width: 4
+                }
+            },
+            axisTick: {
+                distance: -14,
+                length: 10,
+                lineStyle: {
+                    color: '#fff',
+                    width: 2
+                }
+            },
+            axisLabel: {
+                distance: 12,
+                fontSize: 18,
+                fontWeight: 800,
+                fontFamily: "Arial",
+                color: '#fff',
+                formatter: function(value) {
+                    if (value === 0.5) {
+                        return '2/4';
+                    }
+                    if (value === 1) {
+                        return '4/4';
+                    }
+                    return value;
+                }
+            },
+            progress: {
+                show: true,
+                width: 5,
+                itemStyle: {
+                    color: '#fff'
+                }
+            },
+            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.88888888 16.6753472,8.3914275 16.6753472,7.77777779 L16.6753472,3.79333333 L15.6197917,2.73777777 C15.1859413,2.30392741 15.1859413,1.60051702 15.6197917,1.16666667 L15.6197917,1.16666667 C16.053642,0.732816318 16.7570524,0.732816318 17.1909028,1.16666667 L21.9053472,5.88111112 C22.1140468,6.08922811 22.2312072,6.37193273 22.2309028,6.66666667 L22.2309028,16.6666667 C22.2309028,18.5076158 20.7385186,20 18.8975695,20 C17.0566203,20 15.5642361,18.5076158 15.5642361,16.6666667 L15.5642361,12.2222222 L13.3420139,12.2222222 L13.3420139,17.7777778 L13.3420139,17.7777778 C13.9556636,17.7777778 14.453125,18.2752392 14.453125,18.8888889 L14.453125,18.8888889 C14.453125,19.5025386 13.9556636,20 13.3420139,20 L1.11979165,20 C0.506141934,20 0.00868054688,19.5025386 0.00868054687,18.8888889 L0.00868054687,18.8888889 C0.00868054688,18.2752392 0.506141934,17.7777778 1.11979165,17.7777778 L1.11979167,17.7777778 L1.11979167,1.11111112 Z M3.34201388,2.22222221 L3.34201388,8.88888888 L11.1197917,8.88888888 L11.1197917,2.22222221 L3.34201388,2.22222221 Z'
+            },
+            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: ''
+            }]
+        },
+        {
+            name: 'gauge 6',
+            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: 14,
+                fontSize: 18,
+                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,0.4c-0.4,0.2-1.4-0.9-0.9-1.3c0.6-0.4,1.3-0.6,2-0.7c0.8,0,1.5,0.2,2.2,0.5c0.4,0.3,0.9,0.4,1.3,0.4c0.6,0,1.1-0.2,1.5-0.6s1.6,0.7,0.9,1.3S-44,11.6-44.9,11.6L-44.9,11.6z M-34.3,11.6c-0.7,0-1.4-0.3-2-0.7c-0.6-0.4,0.5-1.6,0.9-1.3s0.8,0.4,1.2,0.4c0.5,0,1-0.1,1.4-0.4c0.6-0.3,1.3-0.5,2-0.6h0c0.9,0,1.7,0.3,2.4,0.9c0.7,0.5-0.5,1.6-0.9,1.3c-0.4-0.3-1-0.6-1.5-0.6h0c-0.5,0-0.9,0.2-1.3,0.4c-0.6,0.3-1.3,0.5-2,0.6H-34.3z M-33.5,16.3c-0.7,0-1.4-0.3-1.9-0.8c-0.4-0.3-0.6-0.5-1-0.5c-0.4,0-0.7,0.2-1,0.4c-0.6,0.5-1.3,0.7-2,0.7c-0.7,0-1.4-0.3-1.9-0.8c-0.2-0.3-0.6-0.4-0.9-0.4c-0.4,0-0.7,0.1-1.1,0.5c-0.6,0.5-1.3,0.7-2.1,0.7c-0.7-0.1-1.4-0.4-1.9-0.9c-0.4-0.3-0.6-0.5-1-0.5c-0.3,0-0.6,0.2-0.9,0.4s-1.6-0.7-1.1-1.2c0.5-0.5,1.2-0.8,1.9-0.9c1-0.1,1.6,0.4,2.1,0.8c0.3,0.3,0.6,0.5,1,0.5c0.4,0,0.6-0.1,1-0.4c0.6-0.5,1.4-0.8,2.1-0.8c0.7,0,1.4,0.3,1.9,0.8c0.2,0.2,0.6,0.4,0.9,0.4c0.4,0,0.6-0.1,1-0.4c0.6-0.5,1.3-0.7,2-0.7c0.8,0,1.5,0.3,2,0.9c0.4,0.3,0.6,0.4,0.9,0.4c0.3,0,0.7-0.2,1.1-0.5c0.5-0.4,1.2-0.9,2.3-0.8c0.7,0,1.4,0.3,1.9,0.7c0.5,0.4-0.7,1.5-1,1.3s-0.6-0.4-1-0.4c-0.4,0-0.7,0.2-1.2,0.5C-32,15.9-32.7,16.2-33.5,16.3L-33.5,16.3z'
+            },
+            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: -120,
+                name: ''
+            }]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/gauge-clock.ts b/public/examples/ts/gauge-clock.ts
new file mode 100644
index 0000000..d101b77
--- /dev/null
+++ b/public/examples/ts/gauge-clock.ts
@@ -0,0 +1,221 @@
+/*
+title: Clock
+titleCN: 时钟仪表盘
+category: gauge
+shotWidth: 1000
+difficulty: 7
+videoStart: 2000
+videoEnd: 8000
+*/
+
+option = {
+    series: [{
+        name: 'hour',
+        type: 'gauge',
+        startAngle: 90,
+        endAngle: -270,
+        min: 0,
+        max: 12,
+        splitNumber: 12,
+        clockwise: true,
+        axisLine: {
+            lineStyle: {
+                width: 15,
+                color: [
+                    [1, 'rgba(0,0,0,0.7)']
+                ],
+                shadowColor: 'rgba(0, 0, 0, 0.5)',
+                shadowBlur: 15
+            }
+        },
+        splitLine: {
+            lineStyle: {
+                shadowColor: 'rgba(0, 0, 0, 0.3)',
+                shadowBlur: 3,
+                shadowOffsetX: 1,
+                shadowOffsetY: 2
+            }
+        },
+        axisLabel: {
+            fontSize: 50,
+            distance: 25,
+            formatter: function (value) {
+                if (value === 0) {
+                    return '';
+                }
+                return value + '';
+            }
+        },
+        anchor: {
+            show: true,
+            icon: 'path://M532.8,70.8C532.8,70.8,532.8,70.8,532.8,70.8L532.8,70.8C532.7,70.8,532.8,70.8,532.8,70.8z M456.1,49.6c-2.2-6.2-8.1-10.6-15-10.6h-37.5v10.6h37.5l0,0c2.9,0,5.3,2.4,5.3,5.3c0,2.9-2.4,5.3-5.3,5.3v0h-22.5c-1.5,0.1-3,0.4-4.3,0.9c-4.5,1.6-8.1,5.2-9.7,9.8c-0.6,1.7-0.9,3.4-0.9,5.3v16h10.6v-16l0,0l0,0c0-2.7,2.1-5,4.7-5.3h10.3l10.4,21.2h11.8l-10.4-21.2h0c6.9,0,12.8-4.4,15-10.6c0.6-1.7,0.9-3.5,0.9-5.3C457,53,456.7,51.2,456.1,49.6z M388.9,92.1h11.3L381,39h-3.6h-11.3L346.8,92v0h11.3l3.9-10.7h7.3h7.7l3.9-10.6h-7.7h-7.3l7.7-21.2v0L388.9,92.1z M301,38.9h-10.6v53.1H301V70.8h28.4l3.7-10.6H301V38.9zM333.2,38.9v10.6v10.7v31.9h10.6V38.9H333.2z M249.5,81.4L249.5,81.4L249.5,81.4c-2.9,0-5.3-2.4-5.3-5.3h0V54.9h0l0,0c0-2.9,2.4-5.3,5.3-5.3l0,0l0,0h33.6l3.9-10.6h-37.5c-1.9,0-3.6,0.3-5.3,0.9c-4.5,1.6-8.1,5.2-9.7,9.7c-0.6,1.7-0.9,3.5-0.9,5.3l0,0v21.3c0,1.9,0.3,3.6,0.9,5.3c1.6,4.5,5.2,8.1,9.7,9.7c1.7,0.6,3.5,0.9,5.3,0.9h33.6l3.9-10.6H249.5z M176.8,38.9v10.6h49.6l3.9-10.6H176.8z M192.7,81.4L192.7,81.4L192.7,81.4c-2.9,0-5.3-2.4-5.3-5.3l0,0v-5.3h38.9l3.9-10.6h-53.4v10.6v5.3l0,0c0,1.9,0.3,3.6,0.9,5.3c1.6,4.5,5.2,8.1,9.7,9.7c1.7,0.6,3.4,0.9,5.3,0.9h23.4h10.2l3.9-10.6l0,0H192.7z M460.1,38.9v10.6h21.4v42.5h10.6V49.6h17.5l3.8-10.6H460.1z M541.6,68.2c-0.2,0.1-0.4,0.3-0.7,0.4C541.1,68.4,541.4,68.3,541.6,68.2L541.6,68.2z M554.3,60.2h-21.6v0l0,0c-2.9,0-5.3-2.4-5.3-5.3c0-2.9,2.4-5.3,5.3-5.3l0,0l0,0h33.6l3.8-10.6h-37.5l0,0c-6.9,0-12.8,4.4-15,10.6c-0.6,1.7-0.9,3.5-0.9,5.3c0,1.9,0.3,3.7,0.9,5.3c2.2,6.2,8.1,10.6,15,10.6h21.6l0,0c2.9,0,5.3,2.4,5.3,5.3c0,2.9-2.4,5.3-5.3,5.3l0,0h-37.5v10.6h37.5c6.9,0,12.8-4.4,15-10.6c0.6-1.7,0.9-3.5,0.9-5.3c0-1.9-0.3-3.7-0.9-5.3C567.2,64.6,561.3,60.2,554.3,60.2z',
+            showAbove: false,
+            offsetCenter: [0, '-35%'],
+            size: 120,
+            keepAspect: true,
+            itemStyle: {
+                color: '#707177'
+            }
+        },
+        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: 12,
+            length: '55%',
+            offsetCenter: [0, '8%'],
+            itemStyle: {
+                color: '#C0911F',
+                shadowColor: 'rgba(0, 0, 0, 0.3)',
+                shadowBlur: 8,
+                shadowOffsetX: 2,
+                shadowOffsetY: 4
+            }
+        },
+        detail: {
+            show: false
+        },
+        title: {
+            offsetCenter: [0, '30%']
+        },
+        data: [{
+            value: 0
+        }]
+    },
+    {
+        name: 'minute',
+        type: 'gauge',
+        startAngle: 90,
+        endAngle: -270,
+        min: 0,
+        max: 60,
+        clockwise: true,
+        axisLine: {
+            show: false
+        },
+        splitLine: {
+            show: false
+        },
+        axisTick: {
+            show: false
+        },
+        axisLabel: {
+            show: false
+        },
+        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: 8,
+            length: '70%',
+            offsetCenter: [0, '8%'],
+            itemStyle: {
+                color: '#C0911F',
+                shadowColor: 'rgba(0, 0, 0, 0.3)',
+                shadowBlur: 8,
+                shadowOffsetX: 2,
+                shadowOffsetY: 4
+            }
+        },
+        anchor: {
+            show: true,
+            size: 20,
+            showAbove: false,
+            itemStyle: {
+                borderWidth: 15,
+                borderColor: '#C0911F',
+                shadowColor: 'rgba(0, 0, 0, 0.3)',
+                shadowBlur: 8,
+                shadowOffsetX: 2,
+                shadowOffsetY: 4
+            }
+        },
+        detail: {
+            show: false
+        },
+        title: {
+            offsetCenter: ['0%', '-40%']
+        },
+        data: [{
+            value: 0
+        }]
+    },
+    {
+        name: 'second',
+        type: 'gauge',
+        startAngle: 90,
+        endAngle: -270,
+        min: 0,
+        max: 60,
+        animationEasingUpdate: 'bounceOut',
+        clockwise: true,
+        axisLine: {
+            show: false
+        },
+        splitLine: {
+            show: false
+        },
+        axisTick: {
+            show: false
+        },
+        axisLabel: {
+            show: false
+        },
+        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: 4,
+            length: '85%',
+            offsetCenter: [0, '8%'],
+            itemStyle: {
+                color: '#C0911F',
+                shadowColor: 'rgba(0, 0, 0, 0.3)',
+                shadowBlur: 8,
+                shadowOffsetX: 2,
+                shadowOffsetY: 4
+            }
+        },
+        anchor: {
+            show: true,
+            size: 15,
+            showAbove: true,
+            itemStyle: {
+                color: '#C0911F',
+                shadowColor: 'rgba(0, 0, 0, 0.3)',
+                shadowBlur: 8,
+                shadowOffsetX: 2,
+                shadowOffsetY: 4
+            }
+        },
+        detail: {
+            show: false
+        },
+        title: {
+            offsetCenter: ['0%', '-40%']
+        },
+        data: [{
+            value: 0
+        }]
+    }]
+};
+
+setInterval(function () {
+    var date = new Date();
+    var second = date.getSeconds();
+    var minute = date.getMinutes() + second / 60;
+    var hour = date.getHours() % 12 + minute / 60;
+
+    option.animationDurationUpdate = 300;
+    myChart.setOption<echarts.EChartsOption>({
+        series: [{
+            name: 'hour',
+            animation: hour !== 0,
+            data: [{ value: hour }]
+        }, {
+            name: 'minute',
+            animation: minute !== 0,
+            data: [{ value: minute }]
+        }, {
+            animation: second !== 0,
+            name: 'second',
+            data: [{ value: second }]
+        }]
+    });
+}, 1000);
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/gauge-grade.ts b/public/examples/ts/gauge-grade.ts
new file mode 100644
index 0000000..9fa594c
--- /dev/null
+++ b/public/examples/ts/gauge-grade.ts
@@ -0,0 +1,91 @@
+/*
+title: Grade Gauge
+titleCN: 等级仪表盘
+category: gauge
+shotWidth: 800
+difficulty: 4
+*/
+
+option = {
+    series: [{
+        type: 'gauge',
+        startAngle: 180,
+        endAngle: 0,
+        min: 0,
+        max: 1,
+        splitNumber: 8,
+        axisLine: {
+            lineStyle: {
+                width: 6,
+                color: [
+                    [0.25, '#FF6E76'],
+                    [0.5, '#FDDD60'],
+                    [0.75, '#58D9F9'],
+                    [1, '#7CFFB2']
+                ]
+            }
+        },
+        pointer: {
+            icon: 'path://M12.8,0.7l12,40.1H0.7L12.8,0.7z',
+            length: '12%',
+            width: 20,
+            offsetCenter: [0, '-60%'],
+            itemStyle: {
+                color: 'auto'
+            }
+        },
+        axisTick: {
+            length: 12,
+            lineStyle: {
+                color: 'auto',
+                width: 2
+            }
+        },
+        splitLine: {
+            length: 20,
+            lineStyle: {
+                color: 'auto',
+                width: 5
+            }
+        },
+        axisLabel: {
+            color: '#464646',
+            fontSize: 20,
+            distance: -60,
+            formatter: function (value) {
+                if (value === 0.875) {
+                    return 'A';
+                }
+                else if (value === 0.625) {
+                    return 'B';
+                }
+                else if (value === 0.375) {
+                    return 'C';
+                }
+                else if (value === 0.125) {
+                    return 'D';
+                }
+                return '';
+            }
+        },
+        title: {
+            offsetCenter: [0, '-20%'],
+            fontSize: 30
+        },
+        detail: {
+            fontSize: 50,
+            offsetCenter: [0, '0%'],
+            valueAnimation: true,
+            formatter: function (value) {
+                return Math.round(value * 100) + '分';
+            },
+            color: 'auto'
+        },
+        data: [{
+            value: 0.70,
+            name: 'Grade Rating'
+        }]
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/gauge-multi-title.ts b/public/examples/ts/gauge-multi-title.ts
new file mode 100644
index 0000000..2737680
--- /dev/null
+++ b/public/examples/ts/gauge-multi-title.ts
@@ -0,0 +1,92 @@
+/*
+title: Multi Title Gauge
+titleCN: 多标题仪表盘
+category: gauge
+difficulty: 4
+*/
+
+const gaugeData = [{
+    value: 20,
+    name: 'Good',
+    title: {
+        offsetCenter: ['-40%', '80%']
+    },
+    detail: {
+        offsetCenter: ['-40%', '95%']
+    }
+},
+{
+    value: 40,
+    name: 'Better',
+    title: {
+        offsetCenter: ['0%', '80%']
+    },
+    detail: {
+        offsetCenter: ['0%', '95%']
+    }
+},
+{
+    value: 60,
+    name: 'Perfect',
+    title: {
+        offsetCenter: ['40%', '80%']
+    },
+    detail: {
+        offsetCenter: ['40%', '95%']
+    }
+}];
+
+option = {
+    series: [{
+        type: 'gauge',
+        anchor: {
+            show: true,
+            showAbove: true,
+            size: 18,
+            itemStyle: {
+                color: '#FAC858'
+            }
+        },
+        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: 8,
+            length: '80%',
+            offsetCenter: [0, '8%']
+        },
+
+        progress: {
+            show: true,
+            overlap: true,
+            roundCap: true
+        },
+        axisLine: {
+            roundCap: true
+        },
+        data: gaugeData,
+        title: {
+            fontSize: 14
+        },
+        detail: {
+            width: 40,
+            height: 14,
+            fontSize: 14,
+            color: '#fff',
+            backgroundColor: 'auto',
+            borderRadius: 3,
+            formatter: '{value}%'
+        }
+    }]
+};
+
+setInterval(function () {
+    gaugeData[0].value = +(Math.random() * 100).toFixed(2);
+    gaugeData[1].value = +(Math.random() * 100).toFixed(2);
+    gaugeData[2].value = +(Math.random() * 100).toFixed(2);
+    myChart.setOption<echarts.EChartsOption>({
+        series: [{
+            data: gaugeData
+        }]
+    });
+}, 2000);
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/gauge-progress.ts b/public/examples/ts/gauge-progress.ts
new file mode 100644
index 0000000..13a810e
--- /dev/null
+++ b/public/examples/ts/gauge-progress.ts
@@ -0,0 +1,95 @@
+/*
+title: Grogress Gauge
+titleCN: 进度仪表盘
+category: gauge
+shotWidth: 800
+difficulty: 3
+*/
+
+option = {
+    series: [{
+        type: 'gauge',
+        startAngle: 180,
+        endAngle: 0,
+        min: 0,
+        max: 240,
+        splitNumber: 12,
+        itemStyle: {
+            color: '#58D9F9',
+            shadowColor: 'rgba(0,138,255,0.45)',
+            shadowBlur: 10,
+            shadowOffsetX: 2,
+            shadowOffsetY: 2
+        },
+        progress: {
+            show: true,
+            roundCap: true,
+            width: 18
+        },
+        pointer: {
+            icon: 'path://M2090.36389,615.30999 L2090.36389,615.30999 C2091.48372,615.30999 2092.40383,616.194028 2092.44859,617.312956 L2096.90698,728.755929 C2097.05155,732.369577 2094.2393,735.416212 2090.62566,735.56078 C2090.53845,735.564269 2090.45117,735.566014 2090.36389,735.566014 L2090.36389,735.566014 C2086.74736,735.566014 2083.81557,732.63423 2083.81557,729.017692 C2083.81557,728.930412 2083.81732,728.84314 2083.82081,728.755929 L2088.2792,617.312956 C2088.32396,616.194028 2089.24407,615.30999 2090.36389,615.30999 Z',
+            length: '75%',
+            width: 16,
+            offsetCenter: [0, '5%']
+        },
+        axisLine: {
+            roundCap: true,
+            lineStyle: {
+                width: 18
+            }
+        },
+        axisTick: {
+            splitNumber: 2,
+            lineStyle: {
+                width: 2,
+                color: '#999'
+            }
+        },
+        splitLine: {
+            length: 12,
+            lineStyle: {
+                width: 3,
+                color: '#999'
+            }
+        },
+        axisLabel: {
+            distance: 30,
+            color: '#999',
+            fontSize: 20
+        },
+        title: {
+            show: false
+        },
+        detail: {
+            backgroundColor: '#fff',
+            borderColor: '#999',
+            borderWidth: 2,
+            width: '60%',
+            lineHeight: 40,
+            height: 40,
+            borderRadius: 8,
+            offsetCenter: [0, '35%'],
+            valueAnimation: true,
+            formatter: function (value) {
+                return '{value|' + value.toFixed(0) + '}{unit|km/h}';
+            },
+            rich: {
+                value: {
+                    fontSize: 50,
+                    fontWeight: 'bolder',
+                    color: '#777'
+                },
+                unit: {
+                    fontSize: 20,
+                    color: '#999',
+                    padding: [0, 0, -20, 10]
+                }
+            }
+        },
+        data: [{
+            value: 100
+        }]
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/gauge-ring.ts b/public/examples/ts/gauge-ring.ts
new file mode 100644
index 0000000..3ecce63
--- /dev/null
+++ b/public/examples/ts/gauge-ring.ts
@@ -0,0 +1,112 @@
+/*
+title: Ring Gauge
+titleCN: 得分环
+category: gauge
+difficulty: 5
+videoStart: 1000
+videoEnd: 8000
+*/
+
+const gaugeData = [{
+    value: 20,
+    name: 'Perfect',
+    title: {
+        offsetCenter: ['0%', '-30%']
+    },
+    detail: {
+        valueAnimation: true,
+        offsetCenter: ['0%', '-20%']
+    }
+},
+{
+    value: 40,
+    name: 'Good',
+    title: {
+        offsetCenter: ['0%', '0%']
+    },
+    detail: {
+        valueAnimation: true,
+        offsetCenter: ['0%', '10%']
+    }
+},
+{
+    value: 60,
+    name: 'Commonly',
+    title: {
+        offsetCenter: ['0%', '30%']
+    },
+    detail: {
+        valueAnimation: true,
+        offsetCenter: ['0%', '40%']
+    }
+}]
+
+option = {
+    series: [{
+        type: 'gauge',
+        startAngle: 90,
+        endAngle: -270,
+        pointer: {
+            show: false
+        },
+        progress: {
+            show: true,
+            overlap: false,
+            roundCap: true,
+            clip: false,
+            itemStyle: {
+                borderWidth: 1,
+                borderColor: '#464646'
+            }
+        },
+        axisLine: {
+
+            lineStyle: {
+                width: 40
+            }
+        },
+        splitLine: {
+            show: false,
+            distance: 0,
+            length: 10
+        },
+        axisTick: {
+            show: false
+        },
+        axisLabel: {
+            show: false,
+            distance: 50
+        },
+        data: gaugeData,
+        title: {
+            fontSize: 14
+        },
+        detail: {
+            width: 50,
+            height: 14,
+            fontSize: 14,
+            color: 'auto',
+            borderColor: 'auto',
+            borderRadius: 20,
+            borderWidth: 1,
+            formatter: '{value}%'
+        }
+    }]
+};
+
+setInterval(function () {
+    gaugeData[0].value = +(Math.random() * 100).toFixed(2);
+    gaugeData[1].value = +(Math.random() * 100).toFixed(2);
+    gaugeData[2].value = +(Math.random() * 100).toFixed(2);
+    myChart.setOption<echarts.EChartsOption>({
+        series: [{
+            data: gaugeData,
+            pointer: {
+                show: false
+            }
+        }]
+    }, true);
+}, 2000);
+
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/gauge-simple.ts b/public/examples/ts/gauge-simple.ts
new file mode 100644
index 0000000..1b087d0
--- /dev/null
+++ b/public/examples/ts/gauge-simple.ts
@@ -0,0 +1,31 @@
+/*
+title: Simple Gauge
+titleCN: 带标签数字动画的基础仪表盘
+category: gauge
+difficulty: 1
+videoStart: 0
+videoEnd: 1000
+*/
+
+option = {
+    tooltip: {
+        formatter: '{a} <br/>{b} : {c}%'
+    },
+    series: [{
+        name: 'Pressure',
+        type: 'gauge',
+        progress: {
+            show: true
+        },
+        detail: {
+            valueAnimation: true,
+            formatter: '{value}'
+        },
+        data: [{
+            value: 50,
+            name: 'SCORE'
+        }]
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/gauge-speed.ts b/public/examples/ts/gauge-speed.ts
new file mode 100644
index 0000000..0169fba
--- /dev/null
+++ b/public/examples/ts/gauge-speed.ts
@@ -0,0 +1,57 @@
+/*
+title: Speed Gauge
+titleCN: 速度仪表盘
+category: gauge
+difficulty: 2
+*/
+
+option = {
+    series: [{
+        type: 'gauge',
+        progress: {
+            show: true,
+            width: 18
+        },
+        axisLine: {
+            lineStyle: {
+                width: 18
+            }
+        },
+        axisTick: {
+            show: false
+        },
+        splitLine: {
+            length: 15,
+            lineStyle: {
+                width: 2,
+                color: '#999'
+            }
+        },
+        axisLabel: {
+            distance: 25,
+            color: '#999',
+            fontSize: 20
+        },
+        anchor: {
+            show: true,
+            showAbove: true,
+            size: 25,
+            itemStyle: {
+                borderWidth: 10
+            }
+        },
+        title: {
+            show: false
+        },
+        detail: {
+            valueAnimation: true,
+            fontSize: 80,
+            offsetCenter: [0, '70%']
+        },
+        data: [{
+            value: 70
+        }]
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/gauge-stage.ts b/public/examples/ts/gauge-stage.ts
new file mode 100644
index 0000000..f575d8e
--- /dev/null
+++ b/public/examples/ts/gauge-stage.ts
@@ -0,0 +1,66 @@
+/*
+title: Stage Speed Gauge
+titleCN: 阶段速度仪表盘
+category: gauge
+difficulty: 3
+*/
+
+option = {
+    series: [{
+        type: 'gauge',
+        axisLine: {
+            lineStyle: {
+                width: 30,
+                color: [
+                    [0.3, '#67e0e3'],
+                    [0.7, '#37a2da'],
+                    [1, '#fd666d']
+                ]
+            }
+        },
+        pointer: {
+            itemStyle: {
+                color: 'auto'
+            }
+        },
+        axisTick: {
+            distance: -30,
+            length: 8,
+            lineStyle: {
+                color: '#fff',
+                width: 2
+            }
+        },
+        splitLine: {
+            distance: -30,
+            length: 30,
+            lineStyle: {
+                color: '#fff',
+                width: 4
+            }
+        },
+        axisLabel: {
+            color: 'auto',
+            distance: 40,
+            fontSize: 20
+        },
+        detail: {
+            valueAnimation: true,
+            formatter: '{value} km/h',
+            color: 'auto'
+        },
+        data: [{
+            value: 70
+        }]
+    }]
+};
+
+setInterval(function () {
+    myChart.setOption<echarts.EChartsOption>({
+        series: [{
+            data: [{
+                value: +(Math.random() * 100).toFixed(2)
+            }]
+        }]
+    });
+}, 2000);
\ No newline at end of file
diff --git a/public/examples/ts/gauge-temperature.ts b/public/examples/ts/gauge-temperature.ts
new file mode 100644
index 0000000..158666c
--- /dev/null
+++ b/public/examples/ts/gauge-temperature.ts
@@ -0,0 +1,135 @@
+/*
+title: Temperature Gauge chart
+titleCN: 气温仪表盘
+category: gauge
+difficulty: 4
+videoStart: 2000
+videoEnd: 5000
+*/
+
+option = {
+    series: [{
+            type: 'gauge',
+            center: ["50%", "60%"],
+            startAngle: 200,
+            endAngle: -20,
+            min: 0,
+            max: 60,
+            splitNumber: 12,
+            itemStyle: {
+                color: '#FFAB91'
+            },
+            progress: {
+                show: true,
+                width: 30
+            },
+
+            pointer: {
+                show: false,
+            },
+            axisLine: {
+                lineStyle: {
+                    width: 30
+                }
+            },
+            axisTick: {
+                distance: -45,
+                splitNumber: 5,
+                lineStyle: {
+                    width: 2,
+                    color: '#999'
+                }
+            },
+            splitLine: {
+                distance: -52,
+                length: 14,
+                lineStyle: {
+                    width: 3,
+                    color: '#999'
+                }
+            },
+            axisLabel: {
+                distance: -20,
+                color: '#999',
+                fontSize: 20
+            },
+            anchor: {
+                show: false
+            },
+            title: {
+                show: false
+            },
+            detail: {
+                valueAnimation: true,
+                width: '60%',
+                lineHeight: 40,
+                height: '15%',
+                borderRadius: 8,
+                offsetCenter: [0, '-15%'],
+                fontSize: 60,
+                fontWeight: 'bolder',
+                formatter: '{value} °C',
+                color: 'auto'
+            },
+            data: [{
+                value: 20
+            }]
+        },
+
+        {
+            type: 'gauge',
+            center: ["50%", "60%"],
+            startAngle: 200,
+            endAngle: -20,
+            min: 0,
+            max: 60,
+            itemStyle: {
+                color: '#FD7347',
+            },
+            progress: {
+                show: true,
+                width: 8
+            },
+
+            pointer: {
+                show: false
+            },
+            axisLine: {
+                show: false
+            },
+            axisTick: {
+                show: false
+            },
+            splitLine: {
+                show: false
+            },
+            axisLabel: {
+                show: false
+            },
+            detail: {
+                show: false
+            },
+            data: [{
+                value: 20,
+            }]
+
+        }
+    ],
+};
+
+setInterval(function() {
+    const random = +(Math.random() * 60).toFixed(2);
+    myChart.setOption<echarts.EChartsOption>({
+        series: [{
+            data: [{
+                value: random
+            }]
+        }, {
+            data: [{
+                value: random
+            }]
+        }]
+    });
+}, 2000);
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/gauge.ts b/public/examples/ts/gauge.ts
new file mode 100644
index 0000000..1148f61
--- /dev/null
+++ b/public/examples/ts/gauge.ts
@@ -0,0 +1,25 @@
+/*
+title: Gauge Basic chart
+titleCN: 基础仪表盘
+category: gauge
+difficulty: 1
+*/
+
+option = {
+    tooltip: {
+        formatter: '{a} <br/>{b} : {c}%'
+    },
+    series: [{
+        name: 'Pressure',
+        type: 'gauge',
+        detail: {
+            formatter: '{value}'
+        },
+        data: [{
+            value: 50,
+            name: 'SCORE'
+        }]
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/geo-beef-cuts.ts b/public/examples/ts/geo-beef-cuts.ts
new file mode 100644
index 0000000..23ec964
--- /dev/null
+++ b/public/examples/ts/geo-beef-cuts.ts
@@ -0,0 +1,76 @@
+/*
+title: GEO Beef Cuts
+category: map
+titleCN: 庖丁解牛
+*/
+
+$.get(ROOT_PATH + '/data/asset/geo/Beef_cuts_France.svg', function (svg) {
+
+    echarts.registerMap('Beef_cuts_France', { svg: svg });
+
+    option = {
+        tooltip: {
+        },
+        visualMap: {
+            left: 'center',
+            bottom: '10%',
+            min: 5,
+            max: 100,
+            orient: 'horizontal',
+            text: ['', 'Price'],
+            realtime: true,
+            calculable: true,
+            inRange: {
+                color: ['#dbac00', '#db6e00', '#cf0000']
+            }
+        },
+        series: [{
+            name: 'French Beef Cuts',
+            type: 'map',
+            map: 'Beef_cuts_France',
+            roam: true,
+            emphasis: {
+                label: {
+                    show: false
+                }
+            },
+            selectedMode: false,
+            data: [
+                { name: 'Queue', value: 15 },
+                { name: 'Langue', value: 35 },
+                { name: 'Plat de joue', value: 15 },
+                { name: 'Gros bout de poitrine', value: 25 },
+                { name: 'Jumeau à pot-au-feu', value: 45 },
+                { name: 'Onglet', value: 85 },
+                { name: 'Plat de tranche', value: 25 },
+                { name: 'Araignée', value: 15 },
+                { name: 'Gîte à la noix', value: 55 },
+                { name: 'Bavette d\'aloyau', value: 25 },
+                { name: 'Tende de tranche', value: 65 },
+                { name: 'Rond de gîte', value: 45 },
+                { name: 'Bavettede de flanchet', value: 85 },
+                { name: 'Flanchet', value: 35 },
+                { name: 'Hampe', value: 75 },
+                { name: 'Plat de côtes', value: 65 },
+                { name: 'Tendron Milieu de poitrine', value: 65 },
+                { name: 'Macreuse à pot-au-feu', value: 85 },
+                { name: 'Rumsteck', value: 75 },
+                { name: 'Faux-filet', value: 65 },
+                { name: 'Côtes Entrecôtes', value: 55 },
+                { name: 'Basses côtes', value: 45 },
+                { name: 'Collier', value: 85 },
+                { name: 'Jumeau à biftek', value: 15 },
+                { name: 'Paleron', value: 65 },
+                { name: 'Macreuse à bifteck', value: 45 },
+                { name: 'Gîte', value: 85 },
+                { name: 'Aiguillette baronne', value: 65 },
+                { name: 'Filet', value: 95 },
+            ]
+        }]
+    };
+
+    myChart.setOption(option);
+
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/geo-seatmap-flight.ts b/public/examples/ts/geo-seatmap-flight.ts
new file mode 100644
index 0000000..0676317
--- /dev/null
+++ b/public/examples/ts/geo-seatmap-flight.ts
@@ -0,0 +1,95 @@
+/*
+title: Flight Seatmap with SVG
+category: map
+titleCN: 航班选座(SVG)
+*/
+
+$.get(ROOT_PATH + '/data/asset/geo/flight-seats.svg', function (svg) {
+
+    echarts.registerMap('flight-seats', { svg: svg });
+
+    const takenSeatNames = ['26E', '26D', '26C', '25D', '23C', '21A', '20F'];
+
+    option = {
+        tooltip: {
+        },
+        geo: {
+            map: 'flight-seats',
+            roam: true,
+            selectedMode: 'multiple',
+            layoutCenter: ['50%', '50%'],
+            layoutSize: '95%',
+            tooltip: {
+                show: true
+            },
+            itemStyle: {
+                color: '#fff'
+            },
+            emphasis: {
+                itemStyle: {
+                    color: null,
+                    borderColor: 'green',
+                    borderWidth: 2
+                },
+                label: {
+                    show: false
+                }
+            },
+            select: {
+                itemStyle: {
+                    color: 'green'
+                },
+                label: {
+                    show: false,
+                    textBorderColor: '#fff',
+                    textBorderWidth: 2
+                }
+            },
+            regions: makeTakenRegions(takenSeatNames)
+        }
+    };
+
+    function makeTakenRegions(takenSeatNames: string[]) {
+        var regions = [];
+        for (var i = 0; i < takenSeatNames.length; i++) {
+            regions.push({
+                name: takenSeatNames[i],
+                silent: true,
+                itemStyle: {
+                    color: '#bf0e08'
+                },
+                emphasis: {
+                    itemStyle: {
+                        borderColor: '#aaa',
+                        borderWidth: 1
+                    }
+                },
+                select: {
+                    itemStyle: {
+                        color: '#bf0e08'
+                    }
+                }
+            });
+        }
+        return regions;
+    }
+
+    myChart.setOption(option);
+
+    // Get selected seats.
+    myChart.on('geoselectchanged', function (params: any) {
+        const selectedNames: string[] = params.allSelected[0].name.slice();
+
+        // Remove taken seats.
+        for (var i = selectedNames.length - 1; i >= 0; i--) {
+            if (takenSeatNames.indexOf(selectedNames[i]) >= 0) {
+                selectedNames.splice(i, 1);
+            }
+        }
+
+        console.log('selected', selectedNames);
+    });
+
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/geo-svg-lines.ts b/public/examples/ts/geo-svg-lines.ts
new file mode 100644
index 0000000..31ee272
--- /dev/null
+++ b/public/examples/ts/geo-svg-lines.ts
@@ -0,0 +1,86 @@
+/*
+title: GEO SVG Lines
+category: map
+titleCN: GEO 路径图(SVG)
+*/
+
+$.get(ROOT_PATH + '/data/asset/geo/MacOdrum-LV5-floorplan-web.svg', function (svg) {
+
+    echarts.registerMap('MacOdrum-LV5-floorplan-web', { svg: svg });
+
+    option = {
+        title: {
+            text: 'Visit Route',
+            left: 'center',
+            bottom: 10
+        },
+        tooltip: {
+        },
+        geo: {
+            map: 'MacOdrum-LV5-floorplan-web',
+            roam: true,
+            emphasis: {
+                itemStyle: {
+                    color: null
+                },
+                label: {
+                    show: false
+                }
+            }
+        },
+        series: [{
+            name: 'Route',
+            type: 'lines',
+            coordinateSystem: 'geo',
+            geoIndex: 0,
+            emphasis: {
+                label: {
+                    show: false
+                }
+            },
+            polyline: true,
+            lineStyle: {
+                color: '#c46e54',
+                width: 5,
+                opacity: 1,
+                type: 'dotted'
+            },
+            effect: {
+                show: true,
+                period: 8,
+                color: '#a10000',
+                constantSpeed: 80,
+                trailLength: 0,
+                symbolSize: [20, 12],
+                symbol: 'path://M35.5 40.5c0-22.16 17.84-40 40-40s40 17.84 40 40c0 1.6939-.1042 3.3626-.3067 5H35.8067c-.2025-1.6374-.3067-3.3061-.3067-5zm90.9621-2.6663c-.62-1.4856-.9621-3.1182-.9621-4.8337 0-6.925 5.575-12.5 12.5-12.5s12.5 5.575 12.5 12.5a12.685 12.685 0 0 1-.1529 1.9691l.9537.5506-15.6454 27.0986-.1554-.0897V65.5h-28.7285c-7.318 9.1548-18.587 15-31.2715 15s-23.9535-5.8452-31.2715-15H15.5v-2.8059l-.0937.0437-8.8727-19.0274C2.912 41.5258.5 37.5549.5 33c0-6.925 5.575-12.5 12.5-12.5S25.5 26.075 25.5 33c0 .9035-.0949 1.784-.2753 2.6321L29.8262 45.5h92.2098z'
+            },
+            data: [{
+                coords: [
+                    [110.6189462165178, 456.64349563895087],
+                    [124.10988522879458, 450.8570048730469],
+                    [123.9272226116071, 389.9520693708147],
+                    [61.58708083147317, 386.87942320312504],
+                    [61.58708083147317, 72.8954315876116],
+                    [258.29514854771196, 72.8954315876116],
+                    [260.75457021484374, 336.8559607533482],
+                    [280.5277985253906, 410.2406672084263],
+                    [275.948185765904, 528.0254369698661],
+                    [111.06907909458701, 552.795792593471],
+                    [118.87138231445309, 701.365737015904],
+                    [221.36468155133926, 758.7870354617745],
+                    [307.86195445452006, 742.164737297712],
+                    [366.8489324762834, 560.9895157073103],
+                    [492.8750778390066, 560.9895157073103],
+                    [492.8750778390066, 827.9639780566406],
+                    [294.9255269587053, 827.9639780566406],
+                    [282.79803391043527, 868.2476088113839]
+                ]
+            }]
+        }]
+    };
+
+    myChart.setOption(option);
+
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/geo-svg-map.ts b/public/examples/ts/geo-svg-map.ts
new file mode 100644
index 0000000..73cb134
--- /dev/null
+++ b/public/examples/ts/geo-svg-map.ts
@@ -0,0 +1,200 @@
+/*
+title: GEO SVG Map
+category: map
+titleCN: 地图(SVG)
+*/
+
+$.get(ROOT_PATH + '/data/asset/geo/Sicily_prehellenic_topographic_map.svg', function (svg) {
+
+    echarts.registerMap('sicily', {svg: svg});
+
+    option = {
+        tooltip: {
+            formatter: function (params) {
+                console.log(params);
+                return [
+                    params.name + ':',
+                    'xxxxxxxxxxxxxxxx',
+                    'xxxxxxxxxxxxxxxx',
+                    'xxxxxxxxxxxxxxxx'
+                ].join('<br>')
+            }
+        },
+        geo: [{
+            map: 'sicily',
+            roam: true,
+            layoutCenter: ['50%', '50%'],
+            layoutSize: '100%',
+            selectedMode: 'single',
+            tooltip: {
+                show: true,
+                confine: true,
+                formatter: function (params) {
+                    return [
+                        'This is the introduction:',
+                        'xxxxxxxxxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxxxxxxxxx'
+                    ].join('<br>');
+                }
+            },
+            itemStyle: {
+                color: undefined
+            },
+            emphasis: {
+                label: {
+                    show: false
+                }
+            },
+            select: {
+                itemStyle: {
+                    color: '#b50205'
+                },
+                label: {
+                    show: false
+                }
+            },
+            regions: [{
+                name: 'route1',
+                itemStyle: {
+                    borderWidth: 0
+                },
+                select: {
+                    itemStyle: {
+                        color: '#b5280d',
+                        borderWidth: 0
+                    }
+                },
+                tooltip: {
+                    position: 'right',
+                    alwaysShowContent: true,
+                    enterable: true,
+                    extraCssText: 'user-select: text',
+                    formatter: [
+                        'Route 1:',
+                        'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxxxxxxxxxxxxxxx'
+                    ].join('<br>')
+                }
+            }, {
+                name: 'route2',
+                itemStyle: {
+                    borderWidth: 0
+                },
+                select: {
+                    itemStyle: {
+                        color: '#b5280d',
+                        borderWidth: 0
+                    }
+                },
+                tooltip: {
+                    position: 'left',
+                    alwaysShowContent: true,
+                    enterable: true,
+                    extraCssText: 'user-select: text',
+                    formatter: [
+                        'Route 2:',
+                        'xxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxx',
+                        'xxxxxxxxxxxxxx'
+                    ].join('<br>')
+                }
+            }]
+        }],
+
+
+        // -------------
+        // Make buttons
+        grid: {
+            top: 10,
+            left: 'center',
+            width: 80,
+            height: 20
+        },
+        xAxis: { axisLine: { show: false }, splitLine: { show: false }, axisLabel: { show: false }, axisTick: { show : false } },
+        yAxis: { axisLine: { show: false }, splitLine: { show: false }, axisLabel: { show: false }, axisTick: { show : false } },
+        series: {
+            type: 'scatter',
+            itemStyle: {
+            },
+            label: {
+                show: true,
+                borderColor: '#999',
+                borderWidth: 1,
+                borderRadius: 2,
+                backgroundColor: '#fff',
+                padding: [3, 5],
+                fontSize: 18,
+                opacity: 1,
+                color: '#333'
+            },
+            encode: {
+                label: 2
+            },
+            symbolSize: 0,
+            tooltip: { show: false },
+            selectedMode: 'single',
+            select: {
+                label: {
+                    color: '#fff',
+                    borderColor: '#555',
+                    backgroundColor: '#555'
+                }
+            },
+            data: [
+                [0, 0, 'route1'],
+                [1, 0, 'route2']
+            ]
+        }
+        // Make buttons end
+        // -----------------
+    };
+
+    myChart.setOption(option);
+
+    myChart.on('selectchanged', function (params: any) {
+        if (!params.selected.length) {
+            myChart.dispatchAction({
+                type: 'hideTip'
+            });
+            myChart.dispatchAction({
+                type: 'geoSelect',
+                geoIndex: 0
+                // Use no name to unselect.
+            });
+        }
+        else {
+            var btnDataIdx = params.selected[0].dataIndex[0];
+            var name = option.series.data[btnDataIdx][2];
+
+            myChart.dispatchAction({
+                type: 'geoSelect',
+                geoIndex: 0,
+                name: name
+            });
+            myChart.dispatchAction({
+                type: 'showTip',
+                geoIndex: 0,
+                name: name
+            });
+        }
+    });
+
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/geo-svg-scatter-simple.ts b/public/examples/ts/geo-svg-scatter-simple.ts
new file mode 100644
index 0000000..8ad7c02
--- /dev/null
+++ b/public/examples/ts/geo-svg-scatter-simple.ts
@@ -0,0 +1,56 @@
+/*
+title: GEO SVG Scatter
+category: map
+titleCN: 散点图(SVG)
+*/
+
+
+$.get(ROOT_PATH + '/data/asset/geo/Map_of_Iceland.svg', function (svg) {
+
+    echarts.registerMap('iceland_svg', { svg: svg });
+
+    option = {
+        tooltip: {
+        },
+        geo: {
+            tooltip: {
+                show: true
+            },
+            map: 'iceland_svg',
+            roam: true
+        },
+        series: {
+            type: 'effectScatter',
+            coordinateSystem: 'geo',
+            geoIndex: 0,
+            symbolSize: function (params) {
+                return (params[2] / 100 * 15) + 5;
+            },
+            itemStyle: {
+                color: '#b02a02'
+            },
+            encode: {
+                tooltip: 2
+            },
+            data: [
+                [488.2358421078053, 459.70913833075736, 100],
+                [770.3415644319939, 757.9672194986475, 30],
+                [1180.0329284196291, 743.6141808346214, 80],
+                [894.03790632245, 1188.1985153835008, 61],
+                [1372.98925630313, 477.3839988649537, 70],
+                [1378.62251255796, 935.6708486282843, 81],
+            ]
+        }
+    };
+
+    myChart.setOption(option);
+
+    myChart.getZr().on('click', function (params) {
+        var pixelPoint = [params.offsetX, params.offsetY];
+        var dataPoint = myChart.convertFromPixel({ geoIndex: 0 }, pixelPoint);
+        console.log(dataPoint);
+    });
+
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/geo-svg-traffic.ts b/public/examples/ts/geo-svg-traffic.ts
new file mode 100644
index 0000000..c5ea4d9
--- /dev/null
+++ b/public/examples/ts/geo-svg-traffic.ts
@@ -0,0 +1,169 @@
+/*
+title: GEO SVG Traffic
+category: map
+titleCN: 交通(SVG)
+*/
+
+$.get(ROOT_PATH + '/data/asset/geo/ksia-ext-plan-min.svg', function (svg) {
+
+
+    echarts.registerMap('ksia-ext-plan', { svg: svg });
+
+    option = {
+        tooltip: {
+        },
+        geo: {
+            map: 'ksia-ext-plan',
+            roam: true,
+            layoutCenter: ['50%', '50%'],
+            layoutSize: '100%'
+        },
+        series: [{
+            name: 'Route',
+            type: 'lines',
+            coordinateSystem: 'geo',
+            geoIndex: 0,
+            emphasis: {
+                label: {
+                    show: false
+                }
+            },
+            polyline: true,
+            lineStyle: {
+                color: '#c46e54',
+                width: 0
+            },
+            effect: {
+                show: true,
+                period: 8,
+                color: '#a10000',
+                // constantSpeed: 80,
+                trailLength: 0,
+                symbolSize: [12, 30],
+                symbol: 'path://M87.1667 3.8333L80.5.5h-60l-6.6667 3.3333L.5 70.5v130l10 10h80l10 -10v-130zM15.5 190.5l15 -20h40l15 20zm75 -65l-15 5v35l15 15zm-80 0l15 5v35l-15 15zm65 0l15 -5v-40l-15 20zm-50 0l-15 -5v-40l15 20zm 65,-55 -15,25 c -15,-5 -35,-5 -50,0 l -15,-25 c 25,-15 55,-15 80,0 z'
+            },
+            z: 100,
+            data: [{
+                effect: {
+                    color: '#a10000',
+                    constantSpeed: 100,
+                    delay: 0,
+                },
+                coords: [
+                    [50.875133928571415, 242.66287667410717],
+                    [62.03696428571425, 264.482421875],
+                    [72.63357421874997, 273.62779017857144],
+                    [92.78291852678569, 285.869140625],
+                    [113.43637834821425, 287.21854073660717],
+                    [141.44788783482142, 288.92947823660717],
+                    [191.71686104910714, 289.5507114955357],
+                    [198.3060072544643, 294.0673828125],
+                    [204.99699497767858, 304.60288783482144],
+                    [210.79177734375003, 316.7373046875],
+                    [212.45179408482142, 329.3656529017857],
+                    [210.8885267857143, 443.3925083705358],
+                    [215.35936941964286, 453.00634765625],
+                    [224.38761997767858, 452.15087890625],
+                    [265.71490792410714, 452.20179966517856],
+                    [493.3408844866072, 453.77525111607144],
+                    [572.8892940848216, 448.77992466517856],
+                    [608.9513755580358, 448.43366350446433],
+                    [619.99099609375, 450.8778599330358],
+                    [624.2479715401787, 456.2194475446429],
+                    [628.1434095982145, 463.9899553571429],
+                    [629.8492550223216, 476.0276227678571],
+                    [631.2750362723216, 535.7322126116071],
+                    [624.6757059151787, 546.6496233258929],
+                    [617.1801702008929, 552.6480887276786],
+                    [603.7269056919645, 554.5066964285714],
+                    [588.0178515625, 557.5517578125],
+                    [529.4386104910716, 556.2991071428571],
+                    [422.1994921875001, 551.38525390625],
+                    [291.66921875, 552.5767996651786],
+                    [219.4279380580357, 547.4949079241071],
+                    [209.53912667410714, 541.5931919642858],
+                    [206.70793247767858, 526.1947544642858],
+                    [206.70793247767858, 507.4049944196429],
+                    [206.12234375000003, 468.7663225446429],
+                    [204.48778738839286, 459.44782366071433],
+                    [197.56256417410714, 452.8943219866071],
+                    [170.31995814732142, 456.27546037946433],
+                    [1.8078906249999704, 460.5935407366071]
+                ]
+            }, {
+                effect: {
+                    color: '#00067d',
+                    constantSpeed: 80,
+                    delay: 0,
+                },
+                coords: [
+                    [779.4595368303574, 287.98744419642856],
+                    [689.07009765625, 291.0477818080357],
+                    [301.83300223214286, 290.49783761160717],
+                    [229.31165736607142, 291.73011997767856],
+                    [220.73660156250003, 297.4077845982143],
+                    [214.74832031250003, 308.52378627232144],
+                    [213.82156250000003, 421.35400390625],
+                    [213.19523716517858, 443.0564313616071],
+                    [222.31005301339286, 455.95465959821433],
+                    [271.71846540178575, 454.37611607142856],
+                    [359.64843191964286, 455.9393833705358],
+                    [580.2524358258929, 448.11286272321433],
+                    [627.7156752232145, 460.7463030133929],
+                    [632.3290959821429, 536.6386021205358],
+                    [628.9123130580358, 548.4776785714286],
+                    [612.5667494419645, 556.8235909598214],
+                    [543.7167912946429, 555.4741908482143],
+                    [429.1756361607143, 551.9402901785714],
+                    [293.42089285714286, 551.2172154017858],
+                    [226.20039899553575, 556.0699637276786],
+                    [215.49176339285714, 562.7253069196429],
+                    [213.21051339285714, 591.6024693080358],
+                    [212.00878348214286, 625.6735491071429],
+                    [197.43017020089286, 645.0743582589286],
+                    [187.41405691964286, 647.0857282366071],
+                    [101.79589285714286, 649.0207170758929],
+                    [69.96023437499997, 650.1613420758929],
+                    [56.48150948660714, 656.8268694196429],
+                    [51.11446149553569, 665.2542550223214]
+                ]
+            }, {
+                effect: {
+                    color: '#997405',
+                    constantSpeed: 60,
+                    delay: 0,
+                },
+                coords: [
+                    [2.5920703124999704, 450.66908482142856],
+                    [204.0651450892857, 453.13364955357144],
+                    [378.72844029017864, 453.13874162946433],
+                    [551.1817745535716, 456.1532505580358],
+                    [578.3734598214287, 456.91196986607144],
+                    [601.2317885044645, 458.9895368303571],
+                    [614.1503850446429, 462.1669921875],
+                    [618.99294921875, 479.68882533482144],
+                    [620.0826534598216, 513.5969587053571],
+                    [615.6932840401787, 528.7306082589286],
+                    [608.4829045758929, 533.2625558035714],
+                    [592.7127455357145, 534.9582170758929],
+                    [583.09890625, 527.5492466517858],
+                    [578.6535239955358, 516.4077845982143],
+                    [578.6535239955358, 498.36146763392856],
+                    [577.9966462053571, 477.0613141741071],
+                    [575.3691350446429, 469.1940569196429],
+                    [569.0753292410716, 462.63037109375],
+                    [553.9518638392858, 460.6444614955358],
+                    [298.10051060267864, 465.61432756696433],
+                    [193.49908761160714, 460.1759905133929],
+                    [116.40505859374997, 465.78236607142856],
+                    [3.5137360491071092, 463.47565569196433]
+                ]
+            }]
+        }]
+    };
+
+    myChart.setOption(option);
+
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/graph-circular-layout.ts b/public/examples/ts/graph-circular-layout.ts
new file mode 100644
index 0000000..275e57d
--- /dev/null
+++ b/public/examples/ts/graph-circular-layout.ts
@@ -0,0 +1,68 @@
+/*
+title: Les Miserables
+category: graph
+titleCN: 悲惨世界人物关系图(环形布局)
+shotWidth: 900
+difficulty: 5
+*/
+
+interface GraphNode {
+    symbolSize: number
+    label?: {
+        show?: boolean
+    }
+}
+
+myChart.showLoading();
+$.getJSON(ROOT_PATH + '/data/asset/data/les-miserables.json', function (graph) {
+    myChart.hideLoading();
+
+    graph.nodes.forEach(function (node: GraphNode) {
+        node.label = {
+            show: node.symbolSize > 30
+        };
+    });
+
+    option = {
+        title: {
+            text: 'Les Miserables',
+            subtext: 'Circular layout',
+            top: 'bottom',
+            left: 'right'
+        },
+        tooltip: {},
+        legend: [{
+            data: graph.categories.map(function (a: { name: string }) {
+                return a.name;
+            })
+        }],
+        animationDurationUpdate: 1500,
+        animationEasingUpdate: 'quinticInOut',
+        series: [
+            {
+                name: 'Les Miserables',
+                type: 'graph',
+                layout: 'circular',
+                circular: {
+                    rotateLabel: true
+                },
+                data: graph.nodes,
+                links: graph.links,
+                categories: graph.categories,
+                roam: true,
+                label: {
+                    position: 'right',
+                    formatter: '{b}'
+                },
+                lineStyle: {
+                    color: 'source',
+                    curveness: 0.3
+                }
+            }
+        ]
+    };
+
+    myChart.setOption(option);
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/graph-force-dynamic.ts b/public/examples/ts/graph-force-dynamic.ts
new file mode 100644
index 0000000..80f56ca
--- /dev/null
+++ b/public/examples/ts/graph-force-dynamic.ts
@@ -0,0 +1,59 @@
+/*
+title: Graph Dynamic
+category: graph
+shotDelay: 5000
+titleCN: 动态增加图节点
+difficulty: 6
+*/
+
+const data: NonNullable<echarts.GraphSeriesOption['data']> = [{
+    fixed: true,
+    x: myChart.getWidth() / 2,
+    y: myChart.getHeight() / 2,
+    symbolSize: 20,
+    id: '-1'
+}];
+
+const edges: NonNullable<echarts.GraphSeriesOption['edges']> = [];
+
+option = {
+    series: [{
+        type: 'graph',
+        layout: 'force',
+        animation: false,
+        data: data,
+        force: {
+            // initLayout: 'circular'
+            // gravity: 0
+            repulsion: 100,
+            edgeLength: 5
+        },
+        edges: edges
+    }]
+};
+
+setInterval(function () {
+    data.push({
+        id: data.length + ''
+    });
+    var source = Math.round((data.length - 1) * Math.random());
+    var target = Math.round((data.length - 1) * Math.random());
+    if (source !== target) {
+        edges.push({
+            source: source,
+            target: target
+        });
+    }
+    myChart.setOption({
+        series: [{
+            roam: true,
+            data: data,
+            edges: edges
+        }]
+    });
+
+    // console.log('nodes: ' + data.length);
+    // console.log('links: ' + data.length);
+}, 200);
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/graph-force.ts b/public/examples/ts/graph-force.ts
new file mode 100644
index 0000000..9d6a088
--- /dev/null
+++ b/public/examples/ts/graph-force.ts
@@ -0,0 +1,56 @@
+/*
+title: Force Layout
+category: graph
+titleCN: 力引导布局
+difficulty: 3
+*/
+
+interface GraphNode {
+    symbolSize: number
+    label?: {
+        show?: boolean
+    }
+}
+myChart.showLoading();
+$.get(ROOT_PATH + '/data/asset/data/les-miserables.json', function (graph) {
+    myChart.hideLoading();
+    graph.nodes.forEach(function (node: GraphNode) {
+        node.symbolSize = 5;
+    });
+    option = {
+        title: {
+            text: 'Les Miserables',
+            subtext: 'Default layout',
+            top: 'bottom',
+            left: 'right'
+        },
+        tooltip: {},
+        legend: [{
+            // selectedMode: 'single',
+            data: graph.categories.map(function (a: { name: string }) {
+                return a.name;
+            })
+        }],
+        series: [
+            {
+                name: 'Les Miserables',
+                type: 'graph',
+                layout: 'force',
+                data: graph.nodes,
+                links: graph.links,
+                categories: graph.categories,
+                roam: true,
+                label: {
+                    position: 'right'
+                },
+                force: {
+                    repulsion: 100
+                }
+            }
+        ]
+    };
+
+    myChart.setOption(option);
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/graph-force2.ts b/public/examples/ts/graph-force2.ts
new file mode 100644
index 0000000..7aff54b
--- /dev/null
+++ b/public/examples/ts/graph-force2.ts
@@ -0,0 +1,66 @@
+/*
+title: Force Layout
+category: graph
+titleCN: 力引导布局
+difficulty: 1
+*/
+
+function createNodes(count: number) {
+    var nodes = [];
+    for (var i = 0; i < count; i++) {
+        nodes.push({
+            id: i + ''
+        });
+    }
+    return nodes;
+}
+
+function createEdges(count: number) {
+    var edges = [];
+    if (count === 2) {
+        return [
+            [0, 1]
+        ];
+    }
+    for (var i = 0; i < count; i++) {
+        edges.push([i, (i + 1) % count]);
+    }
+    return edges;
+}
+
+var datas = [];
+for (var i = 0; i < 16; i++) {
+    datas.push({
+        nodes: createNodes(i + 2),
+        edges: createEdges(i + 2)
+    });
+}
+
+option = {
+    series: datas.map(function (item, idx) {
+        return {
+            type: 'graph',
+            layout: 'force',
+            animation: false,
+            data: item.nodes,
+            left: (idx % 4) * 25 + '%',
+            top: Math.floor(idx / 4) * 25 + '%',
+            width: '25%',
+            height: '25%',
+            force: {
+                // initLayout: 'circular'
+                // gravity: 0
+                repulsion: 60,
+                edgeLength: 2
+            },
+            edges: item.edges.map(function (e) {
+                return {
+                    source: e[0] + '',
+                    target: e[1] + ''
+                };
+            })
+        };
+    })
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/graph-grid.ts b/public/examples/ts/graph-grid.ts
new file mode 100644
index 0000000..f1cae83
--- /dev/null
+++ b/public/examples/ts/graph-grid.ts
@@ -0,0 +1,52 @@
+/*
+title: Graph on Cartesian
+category: graph
+titleCN: 笛卡尔坐标系上的 Graph
+difficulty: 2
+*/
+
+const axisData = ['Mon', 'Tue', 'Wed', 'Very Loooong Thu', 'Fri', 'Sat', 'Sun'];
+const data = axisData.map(function (item, i) {
+    return Math.round(Math.random() * 1000 * (i + 1));
+});
+const links = data.map(function (item, i) {
+    return {
+        source: i,
+        target: i + 1
+    };
+});
+links.pop();
+option = {
+    title: {
+        text: 'Graph on Cartesian'
+    },
+    tooltip: {},
+    xAxis: {
+        type: 'category',
+        boundaryGap: false,
+        data: axisData
+    },
+    yAxis: {
+        type: 'value'
+    },
+    series: [
+        {
+            type: 'graph',
+            layout: 'none',
+            coordinateSystem: 'cartesian2d',
+            symbolSize: 40,
+            label: {
+                show: true
+            },
+            edgeSymbol: ['circle', 'arrow'],
+            edgeSymbolSize: [4, 10],
+            data: data,
+            links: links,
+            lineStyle: {
+                color: '#2f4554'
+            }
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/graph-label-overlap.ts b/public/examples/ts/graph-label-overlap.ts
new file mode 100644
index 0000000..aa985ae
--- /dev/null
+++ b/public/examples/ts/graph-label-overlap.ts
@@ -0,0 +1,51 @@
+/*
+title: Hide Overlapped Label
+category: graph
+titleCN: 关系图自动隐藏重叠标签
+difficulty: 3
+*/
+
+myChart.showLoading();
+$.getJSON(ROOT_PATH + '/data/asset/data/les-miserables.json', function (graph) {
+    myChart.hideLoading();
+
+    option = {
+        tooltip: {},
+        legend: [{
+            data: graph.categories.map(function (a) {
+                return a.name;
+            })
+        }],
+        series: [
+            {
+                name: 'Les Miserables',
+                type: 'graph',
+                layout: 'none',
+                data: graph.nodes,
+                links: graph.links,
+                categories: graph.categories,
+                roam: true,
+                label: {
+                    show: true,
+                    position: 'right',
+                    formatter: '{b}'
+                },
+                labelLayout: {
+                    hideOverlap: true
+                },
+                scaleLimit: {
+                    min: 0.4,
+                    max: 2
+                },
+                lineStyle: {
+                    color: 'source',
+                    curveness: 0.3
+                }
+            }
+        ]
+    };
+
+    myChart.setOption(option);
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/graph-life-expectancy.ts b/public/examples/ts/graph-life-expectancy.ts
new file mode 100644
index 0000000..59b9e51
--- /dev/null
+++ b/public/examples/ts/graph-life-expectancy.ts
@@ -0,0 +1,107 @@
+/*
+title: Graph Life Expectancy
+category: graph
+titleCN: Graph Life Expectancy
+difficulty: 7
+*/
+
+
+$.get(ROOT_PATH + '/data/asset/data/life-expectancy.json', function (rawData) {
+
+    const series: NonNullable<echarts.EChartsOption['series']> = [];
+
+    rawData.counties.forEach(function (country: string) {
+        const data = rawData.series.map(function (yearData: (string | number)[][]) {
+            const item = yearData.filter(function (item: (string | number)[]) {
+                return item[3] === country;
+            })[0];
+            return {
+                label: {
+                    show: +item[4] % 20 === 0 && +item[4] > 1940,
+                    position: 'top'
+                },
+                emphasis: {
+                    label: {
+                        show: true
+                    }
+                },
+                name: item[4],
+                value: item
+            };
+        });
+        var links = data.map(function (item: unknown, idx: number) {
+            return {
+                source: idx,
+                target: idx + 1
+            };
+        });
+        links.pop();
+
+        series.push({
+            name: country,
+            type: 'graph',
+            coordinateSystem: 'cartesian2d',
+            data: data,
+            links: links,
+            edgeSymbol: ['none', 'arrow'],
+            edgeSymbolSize: 5,
+            legendHoverLink: false,
+            lineStyle: {
+                color: '#333'
+            },
+            itemStyle: {
+                borderWidth: 1,
+                borderColor: '#333'
+            },
+            label: {
+                color: '#333',
+                position: 'right'
+            },
+            symbolSize: 10,
+            animationDelay: function (idx) {
+                return idx * 100;
+            }
+        });
+    });
+
+    option = {
+        visualMap: {
+            show: false,
+            min: 0,
+            max: 100,
+            dimension: 1
+        },
+        legend: {
+            data: rawData.counties,
+            selectedMode: 'single',
+            right: 100
+        },
+        grid: {
+            left: 0,
+            bottom: 0,
+            containLabel: true,
+            top: 80
+        },
+        xAxis: {
+            type: 'value'
+        },
+        yAxis: {
+            type: 'value',
+            scale: true
+        },
+        toolbox: {
+            feature: {
+                dataZoom: {}
+            }
+        },
+        dataZoom: {
+            type: 'inside'
+        },
+        series: series
+    };
+
+
+    myChart.setOption(option);
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/graph-npm.ts b/public/examples/ts/graph-npm.ts
new file mode 100644
index 0000000..df4fdfe
--- /dev/null
+++ b/public/examples/ts/graph-npm.ts
@@ -0,0 +1,70 @@
+/*
+title: NPM Dependencies
+category: graph
+titleCN: NPM 依赖关系图
+difficulty: 9
+*/
+
+interface RawNode {
+    x: number
+    y: number
+    id: string
+    label: string
+    size: number
+    color: string
+}
+
+interface RawEdge {
+    sourceID: string
+    targetID: string
+}
+
+myChart.showLoading();
+$.getJSON(ROOT_PATH + '/data/asset/data/npmdepgraph.min10.json', function (json) {
+    myChart.hideLoading();
+    myChart.setOption(option = {
+        title: {
+            text: 'NPM Dependencies'
+        },
+        animationDurationUpdate: 1500,
+        animationEasingUpdate: 'quinticInOut',
+        series: [{
+            type: 'graph',
+            layout: 'none',
+            // progressiveThreshold: 700,
+            data: json.nodes.map(function (node: RawNode) {
+                return {
+                    x: node.x,
+                    y: node.y,
+                    id: node.id,
+                    name: node.label,
+                    symbolSize: node.size,
+                    itemStyle: {
+                        color: node.color
+                    }
+                };
+            }),
+            edges: json.edges.map(function (edge: RawEdge) {
+                return {
+                    source: edge.sourceID,
+                    target: edge.targetID
+                };
+            }),
+            emphasis: {
+                focus: 'adjacency',
+                label: {
+                    position: 'right',
+                    show: true
+                }
+            },
+            roam: true,
+            lineStyle: {
+                width: 0.5,
+                curveness: 0.3,
+                opacity: 0.7
+            }
+        }]
+    }, true);
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/graph-simple.ts b/public/examples/ts/graph-simple.ts
new file mode 100644
index 0000000..ee89495
--- /dev/null
+++ b/public/examples/ts/graph-simple.ts
@@ -0,0 +1,89 @@
+/*
+title: Simple Graph
+category: graph
+titleCN: Graph 简单示例
+difficulty: 2
+*/
+
+option = {
+    title: {
+        text: 'Basic Graph'
+    },
+    tooltip: {},
+    animationDurationUpdate: 1500,
+    animationEasingUpdate: 'quinticInOut',
+    series: [
+        {
+            type: 'graph',
+            layout: 'none',
+            symbolSize: 50,
+            roam: true,
+            label: {
+                show: true
+            },
+            edgeSymbol: ['circle', 'arrow'],
+            edgeSymbolSize: [4, 10],
+            edgeLabel: {
+                fontSize: 20
+            },
+            data: [{
+                name: 'Node 1',
+                x: 300,
+                y: 300
+            }, {
+                name: 'Node 2',
+                x: 800,
+                y: 300
+            }, {
+                name: 'Node 3',
+                x: 550,
+                y: 100
+            }, {
+                name: 'Node 4',
+                x: 550,
+                y: 500
+            }],
+            // links: [],
+            links: [{
+                source: 0,
+                target: 1,
+                symbolSize: [5, 20],
+                label: {
+                    show: true
+                },
+                lineStyle: {
+                    width: 5,
+                    curveness: 0.2
+                }
+            }, {
+                source: 'Node 2',
+                target: 'Node 1',
+                label: {
+                    show: true
+                },
+                lineStyle: {
+                    curveness: 0.2
+                }
+            }, {
+                source: 'Node 1',
+                target: 'Node 3'
+            }, {
+                source: 'Node 2',
+                target: 'Node 3'
+            }, {
+                source: 'Node 2',
+                target: 'Node 4'
+            }, {
+                source: 'Node 1',
+                target: 'Node 4'
+            }],
+            lineStyle: {
+                opacity: 0.9,
+                width: 2,
+                curveness: 0
+            }
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/graph-webkit-dep.ts b/public/examples/ts/graph-webkit-dep.ts
new file mode 100644
index 0000000..b894125
--- /dev/null
+++ b/public/examples/ts/graph-webkit-dep.ts
@@ -0,0 +1,45 @@
+/*
+title: Graph Webkit Dep
+category: graph
+titleCN: WebKit 模块关系依赖图
+shotWidth: 900
+difficulty: 8
+*/
+
+myChart.showLoading();
+
+myChart.showLoading();
+$.get(ROOT_PATH + '/data/asset/data/webkit-dep.json', function (webkitDep) {
+    myChart.hideLoading();
+
+    option = {
+        legend: {
+            data: ['HTMLElement', 'WebGL', 'SVG', 'CSS', 'Other']
+        },
+        series: [{
+            type: 'graph',
+            layout: 'force',
+            animation: false,
+            label: {
+                position: 'right',
+                formatter: '{b}'
+            },
+            draggable: true,
+            data: webkitDep.nodes.map(function (node: any, idx: number) {
+                node.id = idx;
+                return node;
+            }),
+            categories: webkitDep.categories,
+            force: {
+                edgeLength: 5,
+                repulsion: 20,
+                gravity: 0.2
+            },
+            edges: webkitDep.links
+        }]
+    };
+
+    myChart.setOption(option);
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/graph.ts b/public/examples/ts/graph.ts
new file mode 100644
index 0000000..55e81e5
--- /dev/null
+++ b/public/examples/ts/graph.ts
@@ -0,0 +1,70 @@
+/*
+title: Les Miserables
+category: graph
+titleCN: 悲惨世界人物关系图
+difficulty: 4
+*/
+
+interface GraphNode {
+    symbolSize: number
+    label?: {
+        show?: boolean
+    }
+}
+
+myChart.showLoading();
+$.getJSON(ROOT_PATH + '/data/asset/data/les-miserables.json', function (graph) {
+    myChart.hideLoading();
+
+    graph.nodes.forEach(function (node: GraphNode) {
+        node.label = {
+            show: node.symbolSize > 30
+        };
+    });
+    option = {
+        title: {
+            text: 'Les Miserables',
+            subtext: 'Default layout',
+            top: 'bottom',
+            left: 'right'
+        },
+        tooltip: {},
+        legend: [{
+            // selectedMode: 'single',
+            data: graph.categories.map(function (a: { name: string }) {
+                return a.name;
+            })
+        }],
+        animationDuration: 1500,
+        animationEasingUpdate: 'quinticInOut',
+        series: [
+            {
+                name: 'Les Miserables',
+                type: 'graph',
+                layout: 'none',
+                data: graph.nodes,
+                links: graph.links,
+                categories: graph.categories,
+                roam: true,
+                label: {
+                    position: 'right',
+                    formatter: '{b}'
+                },
+                lineStyle: {
+                    color: 'source',
+                    curveness: 0.3
+                },
+                emphasis: {
+                    focus: 'adjacency',
+                    lineStyle: {
+                        width: 10
+                    }
+                }
+            }
+        ]
+    };
+
+    myChart.setOption(option);
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/grid-multiple.ts b/public/examples/ts/grid-multiple.ts
new file mode 100644
index 0000000..20b79e8
--- /dev/null
+++ b/public/examples/ts/grid-multiple.ts
@@ -0,0 +1,176 @@
+/*
+title: Rainfall and Water Flow
+category: line
+titleCN: 雨量流量关系图
+difficulty: 4
+*/
+
+
+let timeData = [
+    '2009/6/12 2:00', '2009/6/12 3:00', '2009/6/12 4:00', '2009/6/12 5:00', '2009/6/12 6:00', '2009/6/12 7:00', '2009/6/12 8:00', '2009/6/12 9:00', '2009/6/12 10:00', '2009/6/12 11:00', '2009/6/12 12:00', '2009/6/12 13:00', '2009/6/12 14:00', '2009/6/12 15:00', '2009/6/12 16:00', '2009/6/12 17:00', '2009/6/12 18:00', '2009/6/12 19:00', '2009/6/12 20:00', '2009/6/12 21:00', '2009/6/12 22:00', '2009/6/12 23:00',
+    '2009/6/13 0:00', '2009/6/13 1:00', '2009/6/13 2:00', '2009/6/13 3:00', '2009/6/13 4:00', '2009/6/13 5:00', '2009/6/13 6:00', '2009/6/13 7:00', '2009/6/13 8:00', '2009/6/13 9:00', '2009/6/13 10:00', '2009/6/13 11:00', '2009/6/13 12:00', '2009/6/13 13:00', '2009/6/13 14:00', '2009/6/13 15:00', '2009/6/13 16:00', '2009/6/13 17:00', '2009/6/13 18:00', '2009/6/13 19:00', '2009/6/13 20:00', '2009/6/13 21:00', '2009/6/13 22:00', '2009/6/13 23:00',
+    '2009/6/14 0:00', '2009/6/14 1:00', '2009/6/14 2:00', '2009/6/14 3:00', '2009/6/14 4:00', '2009/6/14 5:00', '2009/6/14 6:00', '2009/6/14 7:00', '2009/6/14 8:00', '2009/6/14 9:00', '2009/6/14 10:00', '2009/6/14 11:00', '2009/6/14 12:00', '2009/6/14 13:00', '2009/6/14 14:00', '2009/6/14 15:00', '2009/6/14 16:00', '2009/6/14 17:00', '2009/6/14 18:00', '2009/6/14 19:00', '2009/6/14 20:00', '2009/6/14 21:00', '2009/6/14 22:00', '2009/6/14 23:00',
+    '2009/6/15 0:00', '2009/6/15 1:00', '2009/6/15 2:00', '2009/6/15 3:00', '2009/6/15 4:00', '2009/6/15 5:00', '2009/6/15 6:00', '2009/6/15 7:00', '2009/6/15 8:00', '2009/6/15 9:00', '2009/6/15 10:00', '2009/6/15 11:00', '2009/6/15 12:00', '2009/6/15 13:00', '2009/6/15 14:00', '2009/6/15 15:00', '2009/6/15 16:00', '2009/6/15 17:00', '2009/6/15 18:00', '2009/6/15 19:00', '2009/6/15 20:00', '2009/6/15 21:00', '2009/6/15 22:00', '2009/6/15 23:00',
+    '2009/6/15 0:00', '2009/6/16 1:00', '2009/6/16 2:00', '2009/6/16 3:00', '2009/6/16 4:00', '2009/6/16 5:00', '2009/6/16 6:00', '2009/6/16 7:00', '2009/6/16 8:00', '2009/6/16 9:00', '2009/6/16 10:00', '2009/6/16 11:00', '2009/6/16 12:00', '2009/6/16 13:00', '2009/6/16 14:00', '2009/6/16 15:00', '2009/6/16 16:00', '2009/6/16 17:00', '2009/6/16 18:00', '2009/6/16 19:00', '2009/6/16 20:00', '2009/6/16 21:00', '2009/6/16 22:00', '2009/6/16 23:00',
+    '2009/6/15 0:00', '2009/6/17 1:00', '2009/6/17 2:00', '2009/6/17 3:00', '2009/6/17 4:00', '2009/6/17 5:00', '2009/6/17 6:00', '2009/6/17 7:00', '2009/6/17 8:00', '2009/6/17 9:00', '2009/6/17 10:00', '2009/6/17 11:00', '2009/6/17 12:00', '2009/6/17 13:00', '2009/6/17 14:00', '2009/6/17 15:00', '2009/6/17 16:00', '2009/6/17 17:00', '2009/6/17 18:00', '2009/6/17 19:00', '2009/6/17 20:00', '2009/6/17 21:00', '2009/6/17 22:00', '2009/6/17 23:00',
+    '2009/6/18 0:00', '2009/6/18 1:00', '2009/6/18 2:00', '2009/6/18 3:00', '2009/6/18 4:00', '2009/6/18 5:00', '2009/6/18 6:00', '2009/6/18 7:00', '2009/6/18 8:00', '2009/6/18 9:00', '2009/6/18 10:00', '2009/6/18 11:00', '2009/6/18 12:00', '2009/6/18 13:00', '2009/6/18 14:00', '2009/6/18 15:00', '2009/6/18 16:00', '2009/6/18 17:00', '2009/6/18 18:00', '2009/6/18 19:00', '2009/6/18 20:00', '2009/6/18 21:00', '2009/6/18 22:00', '2009/6/18 23:00',
+    '2009/6/15 0:00', '2009/6/19 1:00', '2009/6/19 2:00', '2009/6/19 3:00', '2009/6/19 4:00', '2009/6/19 5:00', '2009/6/19 6:00', '2009/6/19 7:00', '2009/6/19 8:00', '2009/6/19 9:00', '2009/6/19 10:00', '2009/6/19 11:00', '2009/6/19 12:00', '2009/6/19 13:00', '2009/6/19 14:00', '2009/6/19 15:00', '2009/6/19 16:00', '2009/6/19 17:00', '2009/6/19 18:00', '2009/6/19 19:00', '2009/6/19 20:00', '2009/6/19 21:00', '2009/6/19 22:00', '2009/6/19 23:00',
+    '2009/6/20 0:00', '2009/6/20 1:00', '2009/6/20 2:00', '2009/6/20 3:00', '2009/6/20 4:00', '2009/6/20 5:00', '2009/6/20 6:00', '2009/6/20 7:00', '2009/6/20 8:00', '2009/6/20 9:00', '2009/6/20 10:00', '2009/6/20 11:00', '2009/6/20 12:00', '2009/6/20 13:00', '2009/6/20 14:00', '2009/6/20 15:00', '2009/6/20 16:00', '2009/6/20 17:00', '2009/6/20 18:00', '2009/6/20 19:00', '2009/6/20 20:00', '2009/6/20 21:00', '2009/6/20 22:00', '2009/6/20 23:00',
+    '2009/6/21 0:00', '2009/6/21 1:00', '2009/6/21 2:00', '2009/6/21 3:00', '2009/6/21 4:00', '2009/6/21 5:00', '2009/6/21 6:00', '2009/6/21 7:00', '2009/6/21 8:00', '2009/6/21 9:00', '2009/6/21 10:00', '2009/6/21 11:00', '2009/6/21 12:00', '2009/6/21 13:00', '2009/6/21 14:00', '2009/6/21 15:00', '2009/6/21 16:00', '2009/6/21 17:00', '2009/6/21 18:00', '2009/6/21 19:00', '2009/6/21 20:00', '2009/6/21 21:00', '2009/6/21 22:00', '2009/6/21 23:00',
+    '2009/6/22 0:00', '2009/6/22 1:00', '2009/6/22 2:00', '2009/6/22 3:00', '2009/6/22 4:00', '2009/6/22 5:00', '2009/6/22 6:00', '2009/6/22 7:00', '2009/6/22 8:00', '2009/6/22 9:00', '2009/6/22 10:00', '2009/6/22 11:00', '2009/6/22 12:00', '2009/6/22 13:00', '2009/6/22 14:00', '2009/6/22 15:00', '2009/6/22 16:00', '2009/6/22 17:00', '2009/6/22 18:00', '2009/6/22 19:00', '2009/6/22 20:00', '2009/6/22 21:00', '2009/6/22 22:00', '2009/6/22 23:00',
+    '2009/6/23 0:00', '2009/6/23 1:00', '2009/6/23 2:00', '2009/6/23 3:00', '2009/6/23 4:00', '2009/6/23 5:00', '2009/6/23 6:00', '2009/6/23 7:00', '2009/6/23 8:00', '2009/6/23 9:00', '2009/6/23 10:00', '2009/6/23 11:00', '2009/6/23 12:00', '2009/6/23 13:00', '2009/6/23 14:00', '2009/6/23 15:00', '2009/6/23 16:00', '2009/6/23 17:00', '2009/6/23 18:00', '2009/6/23 19:00', '2009/6/23 20:00', '2009/6/23 21:00', '2009/6/23 22:00', '2009/6/23 23:00',
+    '2009/6/24 0:00', '2009/6/24 1:00', '2009/6/24 2:00', '2009/6/24 3:00', '2009/6/24 4:00', '2009/6/24 5:00', '2009/6/24 6:00', '2009/6/24 7:00', '2009/6/24 8:00', '2009/6/24 9:00', '2009/6/24 10:00', '2009/6/24 11:00', '2009/6/24 12:00', '2009/6/24 13:00', '2009/6/24 14:00', '2009/6/24 15:00', '2009/6/24 16:00', '2009/6/24 17:00', '2009/6/24 18:00', '2009/6/24 19:00', '2009/6/24 20:00', '2009/6/24 21:00', '2009/6/24 22:00', '2009/6/24 23:00',
+    '2009/6/25 0:00', '2009/6/25 1:00', '2009/6/25 2:00', '2009/6/25 3:00', '2009/6/25 4:00', '2009/6/25 5:00', '2009/6/25 6:00', '2009/6/25 7:00', '2009/6/25 8:00', '2009/6/25 9:00', '2009/6/25 10:00', '2009/6/25 11:00', '2009/6/25 12:00', '2009/6/25 13:00', '2009/6/25 14:00', '2009/6/25 15:00', '2009/6/25 16:00', '2009/6/25 17:00', '2009/6/25 18:00', '2009/6/25 19:00', '2009/6/25 20:00', '2009/6/25 21:00', '2009/6/25 22:00', '2009/6/25 23:00',
+    '2009/6/26 0:00', '2009/6/26 1:00', '2009/6/26 2:00', '2009/6/26 3:00', '2009/6/26 4:00', '2009/6/26 5:00', '2009/6/26 6:00', '2009/6/26 7:00', '2009/6/26 8:00', '2009/6/26 9:00', '2009/6/26 10:00', '2009/6/26 11:00', '2009/6/26 12:00', '2009/6/26 13:00', '2009/6/26 14:00', '2009/6/26 15:00', '2009/6/26 16:00', '2009/6/26 17:00', '2009/6/26 18:00', '2009/6/26 19:00', '2009/6/26 20:00', '2009/6/26 21:00', '2009/6/26 22:00', '2009/6/26 23:00',
+    '2009/6/27 0:00', '2009/6/27 1:00', '2009/6/27 2:00', '2009/6/27 3:00', '2009/6/27 4:00', '2009/6/27 5:00', '2009/6/27 6:00', '2009/6/27 7:00', '2009/6/27 8:00', '2009/6/27 9:00', '2009/6/27 10:00', '2009/6/27 11:00', '2009/6/27 12:00', '2009/6/27 13:00', '2009/6/27 14:00', '2009/6/27 15:00', '2009/6/27 16:00', '2009/6/27 17:00', '2009/6/27 18:00', '2009/6/27 19:00', '2009/6/27 20:00', '2009/6/27 21:00', '2009/6/27 22:00', '2009/6/27 23:00',
+    '2009/6/28 0:00', '2009/6/28 1:00', '2009/6/28 2:00', '2009/6/28 3:00', '2009/6/28 4:00', '2009/6/28 5:00', '2009/6/28 6:00', '2009/6/28 7:00', '2009/6/28 8:00', '2009/6/28 9:00', '2009/6/28 10:00', '2009/6/28 11:00', '2009/6/28 12:00', '2009/6/28 13:00', '2009/6/28 14:00', '2009/6/28 15:00', '2009/6/28 16:00', '2009/6/28 17:00', '2009/6/28 18:00', '2009/6/28 19:00', '2009/6/28 20:00', '2009/6/28 21:00', '2009/6/28 22:00', '2009/6/28 23:00',
+    '2009/6/29 0:00', '2009/6/29 1:00', '2009/6/29 2:00', '2009/6/29 3:00', '2009/6/29 4:00', '2009/6/29 5:00', '2009/6/29 6:00', '2009/6/29 7:00', '2009/6/29 8:00', '2009/6/29 9:00', '2009/6/29 10:00', '2009/6/29 11:00', '2009/6/29 12:00', '2009/6/29 13:00', '2009/6/29 14:00', '2009/6/29 15:00', '2009/6/29 16:00', '2009/6/29 17:00', '2009/6/29 18:00', '2009/6/29 19:00', '2009/6/29 20:00', '2009/6/29 21:00', '2009/6/29 22:00', '2009/6/29 23:00',
+    '2009/6/30 0:00', '2009/6/30 1:00', '2009/6/30 2:00', '2009/6/30 3:00', '2009/6/30 4:00', '2009/6/30 5:00', '2009/6/30 6:00', '2009/6/30 7:00', '2009/6/30 8:00', '2009/6/30 9:00', '2009/6/30 10:00', '2009/6/30 11:00', '2009/6/30 12:00', '2009/6/30 13:00', '2009/6/30 14:00', '2009/6/30 15:00', '2009/6/30 16:00', '2009/6/30 17:00', '2009/6/30 18:00', '2009/6/30 19:00', '2009/6/30 20:00', '2009/6/30 21:00', '2009/6/30 22:00', '2009/6/30 23:00',
+    '2009/7/1 0:00', '2009/7/1 1:00', '2009/7/1 2:00', '2009/7/1 3:00', '2009/7/1 4:00', '2009/7/1 5:00', '2009/7/1 6:00', '2009/7/1 7:00', '2009/7/1 8:00', '2009/7/1 9:00', '2009/7/1 10:00', '2009/7/1 11:00', '2009/7/1 12:00', '2009/7/1 13:00', '2009/7/1 14:00', '2009/7/1 15:00', '2009/7/1 16:00', '2009/7/1 17:00', '2009/7/1 18:00', '2009/7/1 19:00', '2009/7/1 20:00', '2009/7/1 21:00', '2009/7/1 22:00', '2009/7/1 23:00',
+    '2009/7/2 0:00', '2009/7/2 1:00', '2009/7/2 2:00', '2009/7/2 3:00', '2009/7/2 4:00', '2009/7/2 5:00', '2009/7/2 6:00', '2009/7/2 7:00', '2009/7/2 8:00', '2009/7/2 9:00', '2009/7/2 10:00', '2009/7/2 11:00', '2009/7/2 12:00', '2009/7/2 13:00', '2009/7/2 14:00', '2009/7/2 15:00', '2009/7/2 16:00', '2009/7/2 17:00', '2009/7/2 18:00', '2009/7/2 19:00', '2009/7/2 20:00', '2009/7/2 21:00', '2009/7/2 22:00', '2009/7/2 23:00',
+    '2009/7/3 0:00', '2009/7/3 1:00', '2009/7/3 2:00', '2009/7/3 3:00', '2009/7/3 4:00', '2009/7/3 5:00', '2009/7/3 6:00', '2009/7/3 7:00', '2009/7/3 8:00', '2009/7/3 9:00', '2009/7/3 10:00', '2009/7/3 11:00', '2009/7/3 12:00', '2009/7/3 13:00', '2009/7/3 14:00', '2009/7/3 15:00', '2009/7/3 16:00', '2009/7/3 17:00', '2009/7/3 18:00', '2009/7/3 19:00', '2009/7/3 20:00', '2009/7/3 21:00', '2009/7/3 22:00', '2009/7/3 23:00',
+    '2009/7/4 0:00', '2009/7/4 1:00', '2009/7/4 2:00', '2009/7/4 3:00', '2009/7/4 4:00', '2009/7/4 5:00', '2009/7/4 6:00', '2009/7/4 7:00', '2009/7/4 8:00', '2009/7/4 9:00', '2009/7/4 10:00', '2009/7/4 11:00', '2009/7/4 12:00', '2009/7/4 13:00', '2009/7/4 14:00', '2009/7/4 15:00', '2009/7/4 16:00', '2009/7/4 17:00', '2009/7/4 18:00', '2009/7/4 19:00', '2009/7/4 20:00', '2009/7/4 21:00', '2009/7/4 22:00', '2009/7/4 23:00',
+    '2009/7/5 0:00', '2009/7/5 1:00', '2009/7/5 2:00', '2009/7/5 3:00', '2009/7/5 4:00', '2009/7/5 5:00', '2009/7/5 6:00', '2009/7/5 7:00', '2009/7/5 8:00', '2009/7/5 9:00', '2009/7/5 10:00', '2009/7/5 11:00', '2009/7/5 12:00', '2009/7/5 13:00', '2009/7/5 14:00', '2009/7/5 15:00', '2009/7/5 16:00', '2009/7/5 17:00', '2009/7/5 18:00', '2009/7/5 19:00', '2009/7/5 20:00', '2009/7/5 21:00', '2009/7/5 22:00', '2009/7/5 23:00',
+    '2009/7/6 0:00', '2009/7/6 1:00', '2009/7/6 2:00', '2009/7/6 3:00', '2009/7/6 4:00', '2009/7/6 5:00', '2009/7/6 6:00', '2009/7/6 7:00', '2009/7/6 8:00', '2009/7/6 9:00', '2009/7/6 10:00', '2009/7/6 11:00', '2009/7/6 12:00', '2009/7/6 13:00', '2009/7/6 14:00', '2009/7/6 15:00', '2009/7/6 16:00', '2009/7/6 17:00', '2009/7/6 18:00', '2009/7/6 19:00', '2009/7/6 20:00', '2009/7/6 21:00', '2009/7/6 22:00', '2009/7/6 23:00',
+    '2009/7/7 0:00', '2009/7/7 1:00', '2009/7/7 2:00', '2009/7/7 3:00', '2009/7/7 4:00', '2009/7/7 5:00', '2009/7/7 6:00', '2009/7/7 7:00', '2009/7/7 8:00', '2009/7/7 9:00', '2009/7/7 10:00', '2009/7/7 11:00', '2009/7/7 12:00', '2009/7/7 13:00', '2009/7/7 14:00', '2009/7/7 15:00', '2009/7/7 16:00', '2009/7/7 17:00', '2009/7/7 18:00', '2009/7/7 19:00', '2009/7/7 20:00', '2009/7/7 21:00', '2009/7/7 22:00', '2009/7/7 23:00',
+    '2009/7/8 0:00', '2009/7/8 1:00', '2009/7/8 2:00', '2009/7/8 3:00', '2009/7/8 4:00', '2009/7/8 5:00', '2009/7/8 6:00', '2009/7/8 7:00', '2009/7/8 8:00', '2009/7/8 9:00', '2009/7/8 10:00', '2009/7/8 11:00', '2009/7/8 12:00', '2009/7/8 13:00', '2009/7/8 14:00', '2009/7/8 15:00', '2009/7/8 16:00', '2009/7/8 17:00', '2009/7/8 18:00', '2009/7/8 19:00', '2009/7/8 20:00', '2009/7/8 21:00', '2009/7/8 22:00', '2009/7/8 23:00',
+    '2009/7/9 0:00', '2009/7/9 1:00', '2009/7/9 2:00', '2009/7/9 3:00', '2009/7/9 4:00', '2009/7/9 5:00', '2009/7/9 6:00', '2009/7/9 7:00', '2009/7/9 8:00', '2009/7/9 9:00', '2009/7/9 10:00', '2009/7/9 11:00', '2009/7/9 12:00', '2009/7/9 13:00', '2009/7/9 14:00', '2009/7/9 15:00', '2009/7/9 16:00', '2009/7/9 17:00', '2009/7/9 18:00', '2009/7/9 19:00', '2009/7/9 20:00', '2009/7/9 21:00', '2009/7/9 22:00', '2009/7/9 23:00',
+    '2009/7/10 0:00', '2009/7/10 1:00', '2009/7/10 2:00', '2009/7/10 3:00', '2009/7/10 4:00', '2009/7/10 5:00', '2009/7/10 6:00', '2009/7/10 7:00', '2009/7/10 8:00', '2009/7/10 9:00', '2009/7/10 10:00', '2009/7/10 11:00', '2009/7/10 12:00', '2009/7/10 13:00', '2009/7/10 14:00', '2009/7/10 15:00', '2009/7/10 16:00', '2009/7/10 17:00', '2009/7/10 18:00', '2009/7/10 19:00', '2009/7/10 20:00', '2009/7/10 21:00', '2009/7/10 22:00', '2009/7/10 23:00',
+    '2009/7/11 0:00', '2009/7/11 1:00', '2009/7/11 2:00', '2009/7/11 3:00', '2009/7/11 4:00', '2009/7/11 5:00', '2009/7/11 6:00', '2009/7/11 7:00', '2009/7/11 8:00', '2009/7/11 9:00', '2009/7/11 10:00', '2009/7/11 11:00', '2009/7/11 12:00', '2009/7/11 13:00', '2009/7/11 14:00', '2009/7/11 15:00', '2009/7/11 16:00', '2009/7/11 17:00', '2009/7/11 18:00', '2009/7/11 19:00', '2009/7/11 20:00', '2009/7/11 21:00', '2009/7/11 22:00', '2009/7/11 23:00',
+    '2009/7/12 0:00', '2009/7/12 1:00', '2009/7/12 2:00', '2009/7/12 3:00', '2009/7/12 4:00', '2009/7/12 5:00', '2009/7/12 6:00', '2009/7/12 7:00', '2009/7/12 8:00', '2009/7/12 9:00', '2009/7/12 10:00', '2009/7/12 11:00', '2009/7/12 12:00', '2009/7/12 13:00', '2009/7/12 14:00', '2009/7/12 15:00', '2009/7/12 16:00', '2009/7/12 17:00', '2009/7/12 18:00', '2009/7/12 19:00', '2009/7/12 20:00', '2009/7/12 21:00', '2009/7/12 22:00', '2009/7/12 23:00',
+    '2009/7/13 0:00', '2009/7/13 1:00', '2009/7/13 2:00', '2009/7/13 3:00', '2009/7/13 4:00', '2009/7/13 5:00', '2009/7/13 6:00', '2009/7/13 7:00', '2009/7/13 8:00', '2009/7/13 9:00', '2009/7/13 10:00', '2009/7/13 11:00', '2009/7/13 12:00', '2009/7/13 13:00', '2009/7/13 14:00', '2009/7/13 15:00', '2009/7/13 16:00', '2009/7/13 17:00', '2009/7/13 18:00', '2009/7/13 19:00', '2009/7/13 20:00', '2009/7/13 21:00', '2009/7/13 22:00', '2009/7/13 23:00',
+    '2009/7/14 0:00', '2009/7/14 1:00', '2009/7/14 2:00', '2009/7/14 3:00', '2009/7/14 4:00', '2009/7/14 5:00', '2009/7/14 6:00', '2009/7/14 7:00', '2009/7/14 8:00', '2009/7/14 9:00', '2009/7/14 10:00', '2009/7/14 11:00', '2009/7/14 12:00', '2009/7/14 13:00', '2009/7/14 14:00', '2009/7/14 15:00', '2009/7/14 16:00', '2009/7/14 17:00', '2009/7/14 18:00', '2009/7/14 19:00', '2009/7/14 20:00', '2009/7/14 21:00', '2009/7/14 22:00', '2009/7/14 23:00',
+    '2009/7/15 0:00', '2009/7/15 1:00', '2009/7/15 2:00', '2009/7/15 3:00', '2009/7/15 4:00', '2009/7/15 5:00', '2009/7/15 6:00', '2009/7/15 7:00', '2009/7/15 8:00', '2009/7/15 9:00', '2009/7/15 10:00', '2009/7/15 11:00', '2009/7/15 12:00', '2009/7/15 13:00', '2009/7/15 14:00', '2009/7/15 15:00', '2009/7/15 16:00', '2009/7/15 17:00', '2009/7/15 18:00', '2009/7/15 19:00', '2009/7/15 20:00', '2009/7/15 21:00', '2009/7/15 22:00', '2009/7/15 23:00',
+    '2009/7/16 0:00', '2009/7/16 1:00', '2009/7/16 2:00', '2009/7/16 3:00', '2009/7/16 4:00', '2009/7/16 5:00', '2009/7/16 6:00', '2009/7/16 7:00', '2009/7/16 8:00', '2009/7/16 9:00', '2009/7/16 10:00', '2009/7/16 11:00', '2009/7/16 12:00', '2009/7/16 13:00', '2009/7/16 14:00', '2009/7/16 15:00', '2009/7/16 16:00', '2009/7/16 17:00', '2009/7/16 18:00', '2009/7/16 19:00', '2009/7/16 20:00', '2009/7/16 21:00', '2009/7/16 22:00', '2009/7/16 23:00',
+    '2009/7/17 0:00', '2009/7/17 1:00', '2009/7/17 2:00', '2009/7/17 3:00', '2009/7/17 4:00', '2009/7/17 5:00', '2009/7/17 6:00', '2009/7/17 7:00', '2009/7/17 8:00', '2009/7/17 9:00', '2009/7/17 10:00', '2009/7/17 11:00', '2009/7/17 12:00', '2009/7/17 13:00', '2009/7/17 14:00', '2009/7/17 15:00', '2009/7/17 16:00', '2009/7/17 17:00', '2009/7/17 18:00', '2009/7/17 19:00', '2009/7/17 20:00', '2009/7/17 21:00', '2009/7/17 22:00', '2009/7/17 23:00',
+    '2009/7/18 0:00', '2009/7/18 1:00', '2009/7/18 2:00', '2009/7/18 3:00', '2009/7/18 4:00', '2009/7/18 5:00', '2009/7/18 6:00', '2009/7/18 7:00', '2009/7/18 8:00', '2009/7/18 9:00', '2009/7/18 10:00', '2009/7/18 11:00', '2009/7/18 12:00', '2009/7/18 13:00', '2009/7/18 14:00', '2009/7/18 15:00', '2009/7/18 16:00', '2009/7/18 17:00', '2009/7/18 18:00', '2009/7/18 19:00', '2009/7/18 20:00', '2009/7/18 21:00', '2009/7/18 22:00', '2009/7/18 23:00',
+    '2009/7/19 0:00', '2009/7/19 1:00', '2009/7/19 2:00', '2009/7/19 3:00', '2009/7/19 4:00', '2009/7/19 5:00', '2009/7/19 6:00', '2009/7/19 7:00', '2009/7/19 8:00', '2009/7/19 9:00', '2009/7/19 10:00', '2009/7/19 11:00', '2009/7/19 12:00', '2009/7/19 13:00', '2009/7/19 14:00', '2009/7/19 15:00', '2009/7/19 16:00', '2009/7/19 17:00', '2009/7/19 18:00', '2009/7/19 19:00', '2009/7/19 20:00', '2009/7/19 21:00', '2009/7/19 22:00', '2009/7/19 23:00',
+    '2009/7/20 0:00', '2009/7/20 1:00', '2009/7/20 2:00', '2009/7/20 3:00', '2009/7/20 4:00', '2009/7/20 5:00', '2009/7/20 6:00', '2009/7/20 7:00', '2009/7/20 8:00', '2009/7/20 9:00', '2009/7/20 10:00', '2009/7/20 11:00', '2009/7/20 12:00', '2009/7/20 13:00', '2009/7/20 14:00', '2009/7/20 15:00', '2009/7/20 16:00', '2009/7/20 17:00', '2009/7/20 18:00', '2009/7/20 19:00', '2009/7/20 20:00', '2009/7/20 21:00', '2009/7/20 22:00', '2009/7/20 23:00',
+    '2009/7/21 0:00', '2009/7/21 1:00', '2009/7/21 2:00', '2009/7/21 3:00', '2009/7/21 4:00', '2009/7/21 5:00', '2009/7/21 6:00', '2009/7/21 7:00', '2009/7/21 8:00', '2009/7/21 9:00', '2009/7/21 10:00', '2009/7/21 11:00', '2009/7/21 12:00', '2009/7/21 13:00', '2009/7/21 14:00', '2009/7/21 15:00', '2009/7/21 16:00', '2009/7/21 17:00', '2009/7/21 18:00', '2009/7/21 19:00', '2009/7/21 20:00', '2009/7/21 21:00', '2009/7/21 22:00', '2009/7/21 23:00',
+    '2009/7/22 0:00', '2009/7/22 1:00', '2009/7/22 2:00', '2009/7/22 3:00', '2009/7/22 4:00', '2009/7/22 5:00', '2009/7/22 6:00', '2009/7/22 7:00', '2009/7/22 8:00', '2009/7/22 9:00', '2009/7/22 10:00', '2009/7/22 11:00', '2009/7/22 12:00', '2009/7/22 13:00', '2009/7/22 14:00', '2009/7/22 15:00', '2009/7/22 16:00', '2009/7/22 17:00', '2009/7/22 18:00', '2009/7/22 19:00', '2009/7/22 20:00', '2009/7/22 21:00', '2009/7/22 22:00', '2009/7/22 23:00',
+    '2009/7/23 0:00', '2009/7/23 1:00', '2009/7/23 2:00', '2009/7/23 3:00', '2009/7/23 4:00', '2009/7/23 5:00', '2009/7/23 6:00', '2009/7/23 7:00', '2009/7/23 8:00', '2009/7/23 9:00', '2009/7/23 10:00', '2009/7/23 11:00', '2009/7/23 12:00', '2009/7/23 13:00', '2009/7/23 14:00', '2009/7/23 15:00', '2009/7/23 16:00', '2009/7/23 17:00', '2009/7/23 18:00', '2009/7/23 19:00', '2009/7/23 20:00', '2009/7/23 21:00', '2009/7/23 22:00', '2009/7/23 23:00',
+    '2009/7/24 0:00', '2009/7/24 1:00', '2009/7/24 2:00', '2009/7/24 3:00', '2009/7/24 4:00', '2009/7/24 5:00', '2009/7/24 6:00', '2009/7/24 7:00', '2009/7/24 8:00', '2009/7/24 9:00', '2009/7/24 10:00', '2009/7/24 11:00', '2009/7/24 12:00', '2009/7/24 13:00', '2009/7/24 14:00', '2009/7/24 15:00', '2009/7/24 16:00', '2009/7/24 17:00', '2009/7/24 18:00', '2009/7/24 19:00', '2009/7/24 20:00', '2009/7/24 21:00', '2009/7/24 22:00', '2009/7/24 23:00',
+    '2009/7/25 0:00', '2009/7/25 1:00', '2009/7/25 2:00', '2009/7/25 3:00', '2009/7/25 4:00', '2009/7/25 5:00', '2009/7/25 6:00', '2009/7/25 7:00', '2009/7/25 8:00', '2009/7/25 9:00', '2009/7/25 10:00', '2009/7/25 11:00', '2009/7/25 12:00', '2009/7/25 13:00', '2009/7/25 14:00', '2009/7/25 15:00', '2009/7/25 16:00', '2009/7/25 17:00', '2009/7/25 18:00', '2009/7/25 19:00', '2009/7/25 20:00', '2009/7/25 21:00', '2009/7/25 22:00', '2009/7/25 23:00',
+    '2009/7/26 0:00', '2009/7/26 1:00', '2009/7/26 2:00', '2009/7/26 3:00', '2009/7/26 4:00', '2009/7/26 5:00', '2009/7/26 6:00', '2009/7/26 7:00', '2009/7/26 8:00', '2009/7/26 9:00', '2009/7/26 10:00', '2009/7/26 11:00', '2009/7/26 12:00', '2009/7/26 13:00', '2009/7/26 14:00', '2009/7/26 15:00', '2009/7/26 16:00', '2009/7/26 17:00', '2009/7/26 18:00', '2009/7/26 19:00', '2009/7/26 20:00', '2009/7/26 21:00', '2009/7/26 22:00', '2009/7/26 23:00',
+    '2009/7/27 0:00', '2009/7/27 1:00', '2009/7/27 2:00', '2009/7/27 3:00', '2009/7/27 4:00', '2009/7/27 5:00', '2009/7/27 6:00', '2009/7/27 7:00', '2009/7/27 8:00', '2009/7/27 9:00', '2009/7/27 10:00', '2009/7/27 11:00', '2009/7/27 12:00', '2009/7/27 13:00', '2009/7/27 14:00', '2009/7/27 15:00', '2009/7/27 16:00', '2009/7/27 17:00', '2009/7/27 18:00', '2009/7/27 19:00', '2009/7/27 20:00', '2009/7/27 21:00', '2009/7/27 22:00', '2009/7/27 23:00',
+    '2009/7/28 0:00', '2009/7/28 1:00', '2009/7/28 2:00', '2009/7/28 3:00', '2009/7/28 4:00', '2009/7/28 5:00', '2009/7/28 6:00', '2009/7/28 7:00', '2009/7/28 8:00', '2009/7/28 9:00', '2009/7/28 10:00', '2009/7/28 11:00', '2009/7/28 12:00', '2009/7/28 13:00', '2009/7/28 14:00', '2009/7/28 15:00', '2009/7/28 16:00', '2009/7/28 17:00', '2009/7/28 18:00', '2009/7/28 19:00', '2009/7/28 20:00', '2009/7/28 21:00', '2009/7/28 22:00', '2009/7/28 23:00',
+    '2009/7/29 0:00', '2009/7/29 1:00', '2009/7/29 2:00', '2009/7/29 3:00', '2009/7/29 4:00', '2009/7/29 5:00', '2009/7/29 6:00', '2009/7/29 7:00', '2009/7/29 8:00', '2009/7/29 9:00', '2009/7/29 10:00', '2009/7/29 11:00', '2009/7/29 12:00', '2009/7/29 13:00', '2009/7/29 14:00', '2009/7/29 15:00', '2009/7/29 16:00', '2009/7/29 17:00', '2009/7/29 18:00', '2009/7/29 19:00', '2009/7/29 20:00', '2009/7/29 21:00', '2009/7/29 22:00', '2009/7/29 23:00',
+    '2009/7/30 0:00', '2009/7/30 1:00', '2009/7/30 2:00', '2009/7/30 3:00', '2009/7/30 4:00', '2009/7/30 5:00', '2009/7/30 6:00', '2009/7/30 7:00', '2009/7/30 8:00', '2009/7/30 9:00', '2009/7/30 10:00', '2009/7/30 11:00', '2009/7/30 12:00', '2009/7/30 13:00', '2009/7/30 14:00', '2009/7/30 15:00', '2009/7/30 16:00', '2009/7/30 17:00', '2009/7/30 18:00', '2009/7/30 19:00', '2009/7/30 20:00', '2009/7/30 21:00', '2009/7/30 22:00', '2009/7/30 23:00',
+    '2009/7/31 0:00', '2009/7/31 1:00', '2009/7/31 2:00', '2009/7/31 3:00', '2009/7/31 4:00', '2009/7/31 5:00', '2009/7/31 6:00', '2009/7/31 7:00', '2009/7/31 8:00', '2009/7/31 9:00', '2009/7/31 10:00', '2009/7/31 11:00', '2009/7/31 12:00', '2009/7/31 13:00', '2009/7/31 14:00', '2009/7/31 15:00', '2009/7/31 16:00', '2009/7/31 17:00', '2009/7/31 18:00', '2009/7/31 19:00', '2009/7/31 20:00', '2009/7/31 21:00', '2009/7/31 22:00', '2009/7/31 23:00',
+    '2009/8/1 0:00', '2009/8/1 1:00', '2009/8/1 2:00', '2009/8/1 3:00', '2009/8/1 4:00', '2009/8/1 5:00', '2009/8/1 6:00', '2009/8/1 7:00', '2009/8/1 8:00', '2009/8/1 9:00', '2009/8/1 10:00', '2009/8/1 11:00', '2009/8/1 12:00', '2009/8/1 13:00', '2009/8/1 14:00', '2009/8/1 15:00', '2009/8/1 16:00', '2009/8/1 17:00', '2009/8/1 18:00', '2009/8/1 19:00', '2009/8/1 20:00', '2009/8/1 21:00', '2009/8/1 22:00', '2009/8/1 23:00', '2009/8/2 0:00', '2009/8/2 1:00', '2009/8/2 2:00', '2009/8/2 3:00', '2009/8/2 4:00', '2009/8/2 5:00', '2009/8/2 6:00', '2009/8/2 7:00', '2009/8/2 8:00', '2009/8/2 9:00', '2009/8/2 10:00', '2009/8/2 11:00', '2009/8/2 12:00', '2009/8/2 13:00', '2009/8/2 14:00', '2009/8/2 15:00', '2009/8/2 16:00', '2009/8/2 17:00', '2009/8/2 18:00', '2009/8/2 19:00', '2009/8/2 20:00', '2009/8/2 21:00', '2009/8/2 22:00', '2009/8/2 23:00', '2009/8/3 0:00', '2009/8/3 1:00', '2009/8/3 2:00', '2009/8/3 3:00', '2009/8/3 4:00', '2009/8/3 5:00', '2009/8/3 6:00', '2009/8/3 7:00', '2009/8/3 8:00', '2009/8/3 9:00', '2009/8/3 10:00', '2009/8/3 11:00', '2009/8/3 12:00', '2009/8/3 13:00', '2009/8/3 14:00', '2009/8/3 15:00', '2009/8/3 16:00', '2009/8/3 17:00', '2009/8/3 18:00', '2009/8/3 19:00', '2009/8/3 20:00', '2009/8/3 21:00', '2009/8/3 22:00', '2009/8/3 23:00', '2009/8/4 0:00', '2009/8/4 1:00', '2009/8/4 2:00', '2009/8/4 3:00', '2009/8/4 4:00', '2009/8/4 5:00', '2009/8/4 6:00', '2009/8/4 7:00', '2009/8/4 8:00', '2009/8/4 9:00', '2009/8/4 10:00', '2009/8/4 11:00', '2009/8/4 12:00', '2009/8/4 13:00', '2009/8/4 14:00', '2009/8/4 15:00', '2009/8/4 16:00', '2009/8/4 17:00', '2009/8/4 18:00', '2009/8/4 19:00', '2009/8/4 20:00', '2009/8/4 21:00', '2009/8/4 22:00', '2009/8/4 23:00', '2009/8/5 0:00', '2009/8/5 1:00', '2009/8/5 2:00', '2009/8/5 3:00', '2009/8/5 4:00', '2009/8/5 5:00', '2009/8/5 6:00', '2009/8/5 7:00', '2009/8/5 8:00', '2009/8/5 9:00', '2009/8/5 10:00', '2009/8/5 11:00', '2009/8/5 12:00', '2009/8/5 13:00', '2009/8/5 14:00', '2009/8/5 15:00', '2009/8/5 16:00', '2009/8/5 17:00', '2009/8/5 18:00', '2009/8/5 19:00', '2009/8/5 20:00', '2009/8/5 21:00', '2009/8/5 22:00', '2009/8/5 23:00', '2009/8/6 0:00', '2009/8/6 1:00', '2009/8/6 2:00', '2009/8/6 3:00', '2009/8/6 4:00', '2009/8/6 5:00', '2009/8/6 6:00', '2009/8/6 7:00', '2009/8/6 8:00', '2009/8/6 9:00', '2009/8/6 10:00', '2009/8/6 11:00', '2009/8/6 12:00', '2009/8/6 13:00', '2009/8/6 14:00', '2009/8/6 15:00', '2009/8/6 16:00', '2009/8/6 17:00', '2009/8/6 18:00', '2009/8/6 19:00', '2009/8/6 20:00', '2009/8/6 21:00', '2009/8/6 22:00', '2009/8/6 23:00', '2009/8/7 0:00', '2009/8/7 1:00', '2009/8/7 2:00', '2009/8/7 3:00', '2009/8/7 4:00', '2009/8/7 5:00', '2009/8/7 6:00', '2009/8/7 7:00', '2009/8/7 8:00', '2009/8/7 9:00', '2009/8/7 10:00', '2009/8/7 11:00', '2009/8/7 12:00', '2009/8/7 13:00', '2009/8/7 14:00', '2009/8/7 15:00', '2009/8/7 16:00', '2009/8/7 17:00', '2009/8/7 18:00', '2009/8/7 19:00', '2009/8/7 20:00', '2009/8/7 21:00', '2009/8/7 22:00', '2009/8/7 23:00', '2009/8/8 0:00', '2009/8/8 1:00', '2009/8/8 2:00', '2009/8/8 3:00', '2009/8/8 4:00', '2009/8/8 5:00', '2009/8/8 6:00', '2009/8/8 7:00', '2009/8/8 8:00', '2009/8/8 9:00', '2009/8/8 10:00', '2009/8/8 11:00', '2009/8/8 12:00', '2009/8/8 13:00', '2009/8/8 14:00', '2009/8/8 15:00', '2009/8/8 16:00', '2009/8/8 17:00', '2009/8/8 18:00', '2009/8/8 19:00', '2009/8/8 20:00', '2009/8/8 21:00', '2009/8/8 22:00', '2009/8/8 23:00', '2009/8/9 0:00', '2009/8/9 1:00', '2009/8/9 2:00', '2009/8/9 3:00', '2009/8/9 4:00', '2009/8/9 5:00', '2009/8/9 6:00', '2009/8/9 7:00', '2009/8/9 8:00', '2009/8/9 9:00', '2009/8/9 10:00', '2009/8/9 11:00', '2009/8/9 12:00', '2009/8/9 13:00', '2009/8/9 14:00', '2009/8/9 15:00', '2009/8/9 16:00', '2009/8/9 17:00', '2009/8/9 18:00', '2009/8/9 19:00', '2009/8/9 20:00', '2009/8/9 21:00', '2009/8/9 22:00', '2009/8/9 23:00', '2009/8/10 0:00', '2009/8/10 1:00', '2009/8/10 2:00', '2009/8/10 3:00', '2009/8/10 4:00', '2009/8/10 5:00', '2009/8/10 6:00', '2009/8/10 7:00', '2009/8/10 8:00', '2009/8/10 9:00', '2009/8/10 10:00', '2009/8/10 11:00', '2009/8/10 12:00', '2009/8/10 13:00', '2009/8/10 14:00', '2009/8/10 15:00', '2009/8/10 16:00', '2009/8/10 17:00', '2009/8/10 18:00', '2009/8/10 19:00', '2009/8/10 20:00', '2009/8/10 21:00', '2009/8/10 22:00', '2009/8/10 23:00', '2009/8/11 0:00', '2009/8/11 1:00', '2009/8/11 2:00', '2009/8/11 3:00', '2009/8/11 4:00', '2009/8/11 5:00', '2009/8/11 6:00', '2009/8/11 7:00', '2009/8/11 8:00', '2009/8/11 9:00', '2009/8/11 10:00', '2009/8/11 11:00', '2009/8/11 12:00', '2009/8/11 13:00', '2009/8/11 14:00', '2009/8/11 15:00', '2009/8/11 16:00', '2009/8/11 17:00', '2009/8/11 18:00', '2009/8/11 19:00', '2009/8/11 20:00', '2009/8/11 21:00', '2009/8/11 22:00', '2009/8/11 23:00', '2009/8/12 0:00', '2009/8/12 1:00', '2009/8/12 2:00', '2009/8/12 3:00', '2009/8/12 4:00', '2009/8/12 5:00', '2009/8/12 6:00', '2009/8/12 7:00', '2009/8/12 8:00', '2009/8/12 9:00', '2009/8/12 10:00', '2009/8/12 11:00', '2009/8/12 12:00', '2009/8/12 13:00', '2009/8/12 14:00', '2009/8/12 15:00', '2009/8/12 16:00', '2009/8/12 17:00', '2009/8/12 18:00', '2009/8/12 19:00', '2009/8/12 20:00', '2009/8/12 21:00', '2009/8/12 22:00', '2009/8/12 23:00', '2009/8/13 0:00', '2009/8/13 1:00', '2009/8/13 2:00', '2009/8/13 3:00', '2009/8/13 4:00', '2009/8/13 5:00', '2009/8/13 6:00', '2009/8/13 7:00', '2009/8/13 8:00', '2009/8/13 9:00', '2009/8/13 10:00', '2009/8/13 11:00', '2009/8/13 12:00', '2009/8/13 13:00', '2009/8/13 14:00', '2009/8/13 15:00', '2009/8/13 16:00', '2009/8/13 17:00', '2009/8/13 18:00', '2009/8/13 19:00', '2009/8/13 20:00', '2009/8/13 21:00', '2009/8/13 22:00', '2009/8/13 23:00', '2009/8/14 0:00', '2009/8/14 1:00', '2009/8/14 2:00', '2009/8/14 3:00', '2009/8/14 4:00', '2009/8/14 5:00', '2009/8/14 6:00', '2009/8/14 7:00', '2009/8/14 8:00', '2009/8/14 9:00', '2009/8/14 10:00', '2009/8/14 11:00', '2009/8/14 12:00', '2009/8/14 13:00', '2009/8/14 14:00', '2009/8/14 15:00', '2009/8/14 16:00', '2009/8/14 17:00', '2009/8/14 18:00', '2009/8/14 19:00', '2009/8/14 20:00', '2009/8/14 21:00', '2009/8/14 22:00', '2009/8/14 23:00', '2009/8/15 0:00', '2009/8/15 1:00', '2009/8/15 2:00', '2009/8/15 3:00', '2009/8/15 4:00', '2009/8/15 5:00', '2009/8/15 6:00', '2009/8/15 7:00', '2009/8/15 8:00', '2009/8/15 9:00', '2009/8/15 10:00', '2009/8/15 11:00', '2009/8/15 12:00', '2009/8/15 13:00', '2009/8/15 14:00', '2009/8/15 15:00', '2009/8/15 16:00', '2009/8/15 17:00', '2009/8/15 18:00', '2009/8/15 19:00', '2009/8/15 20:00', '2009/8/15 21:00', '2009/8/15 22:00', '2009/8/15 23:00', '2009/8/16 0:00', '2009/8/16 1:00', '2009/8/16 2:00', '2009/8/16 3:00', '2009/8/16 4:00', '2009/8/16 5:00', '2009/8/16 6:00', '2009/8/16 7:00', '2009/8/16 8:00', '2009/8/16 9:00', '2009/8/16 10:00', '2009/8/16 11:00', '2009/8/16 12:00', '2009/8/16 13:00', '2009/8/16 14:00', '2009/8/16 15:00', '2009/8/16 16:00', '2009/8/16 17:00', '2009/8/16 18:00', '2009/8/16 19:00', '2009/8/16 20:00', '2009/8/16 21:00', '2009/8/16 22:00', '2009/8/16 23:00', '2009/8/17 0:00', '2009/8/17 1:00', '2009/8/17 2:00', '2009/8/17 3:00', '2009/8/17 4:00', '2009/8/17 5:00', '2009/8/17 6:00', '2009/8/17 7:00', '2009/8/17 8:00', '2009/8/17 9:00', '2009/8/17 10:00', '2009/8/17 11:00', '2009/8/17 12:00', '2009/8/17 13:00', '2009/8/17 14:00', '2009/8/17 15:00', '2009/8/17 16:00', '2009/8/17 17:00', '2009/8/17 18:00', '2009/8/17 19:00', '2009/8/17 20:00', '2009/8/17 21:00', '2009/8/17 22:00', '2009/8/17 23:00', '2009/8/18 0:00', '2009/8/18 1:00', '2009/8/18 2:00', '2009/8/18 3:00', '2009/8/18 4:00', '2009/8/18 5:00', '2009/8/18 6:00', '2009/8/18 7:00', '2009/8/18 8:00', '2009/8/18 9:00', '2009/8/18 10:00', '2009/8/18 11:00', '2009/8/18 12:00', '2009/8/18 13:00', '2009/8/18 14:00', '2009/8/18 15:00', '2009/8/18 16:00', '2009/8/18 17:00', '2009/8/18 18:00', '2009/8/18 19:00', '2009/8/18 20:00', '2009/8/18 21:00', '2009/8/18 22:00', '2009/8/18 23:00', '2009/8/19 0:00', '2009/8/19 1:00', '2009/8/19 2:00', '2009/8/19 3:00', '2009/8/19 4:00', '2009/8/19 5:00', '2009/8/19 6:00', '2009/8/19 7:00', '2009/8/19 8:00', '2009/8/19 9:00', '2009/8/19 10:00', '2009/8/19 11:00', '2009/8/19 12:00', '2009/8/19 13:00', '2009/8/19 14:00', '2009/8/19 15:00', '2009/8/19 16:00', '2009/8/19 17:00', '2009/8/19 18:00', '2009/8/19 19:00', '2009/8/19 20:00', '2009/8/19 21:00', '2009/8/19 22:00', '2009/8/19 23:00', '2009/8/20 0:00', '2009/8/20 1:00', '2009/8/20 2:00', '2009/8/20 3:00', '2009/8/20 4:00', '2009/8/20 5:00', '2009/8/20 6:00', '2009/8/20 7:00', '2009/8/20 8:00', '2009/8/20 9:00', '2009/8/20 10:00', '2009/8/20 11:00', '2009/8/20 12:00', '2009/8/20 13:00', '2009/8/20 14:00', '2009/8/20 15:00', '2009/8/20 16:00', '2009/8/20 17:00', '2009/8/20 18:00', '2009/8/20 19:00', '2009/8/20 20:00', '2009/8/20 21:00', '2009/8/20 22:00', '2009/8/20 23:00', '2009/8/21 0:00', '2009/8/21 1:00', '2009/8/21 2:00', '2009/8/21 3:00', '2009/8/21 4:00', '2009/8/21 5:00', '2009/8/21 6:00', '2009/8/21 7:00', '2009/8/21 8:00', '2009/8/21 9:00', '2009/8/21 10:00', '2009/8/21 11:00', '2009/8/21 12:00', '2009/8/21 13:00', '2009/8/21 14:00', '2009/8/21 15:00', '2009/8/21 16:00', '2009/8/21 17:00', '2009/8/21 18:00', '2009/8/21 19:00', '2009/8/21 20:00', '2009/8/21 21:00', '2009/8/21 22:00', '2009/8/21 23:00', '2009/8/22 0:00', '2009/8/22 1:00', '2009/8/22 2:00', '2009/8/22 3:00', '2009/8/22 4:00', '2009/8/22 5:00', '2009/8/22 6:00', '2009/8/22 7:00', '2009/8/22 8:00', '2009/8/22 9:00', '2009/8/22 10:00', '2009/8/22 11:00', '2009/8/22 12:00', '2009/8/22 13:00', '2009/8/22 14:00', '2009/8/22 15:00', '2009/8/22 16:00', '2009/8/22 17:00', '2009/8/22 18:00', '2009/8/22 19:00', '2009/8/22 20:00', '2009/8/22 21:00', '2009/8/22 22:00', '2009/8/22 23:00', '2009/8/23 0:00', '2009/8/23 1:00', '2009/8/23 2:00', '2009/8/23 3:00', '2009/8/23 4:00', '2009/8/23 5:00', '2009/8/23 6:00', '2009/8/23 7:00', '2009/8/23 8:00', '2009/8/23 9:00', '2009/8/23 10:00', '2009/8/23 11:00', '2009/8/23 12:00', '2009/8/23 13:00', '2009/8/23 14:00', '2009/8/23 15:00', '2009/8/23 16:00', '2009/8/23 17:00', '2009/8/23 18:00', '2009/8/23 19:00', '2009/8/23 20:00', '2009/8/23 21:00', '2009/8/23 22:00', '2009/8/23 23:00', '2009/8/24 0:00', '2009/8/24 1:00', '2009/8/24 2:00', '2009/8/24 3:00', '2009/8/24 4:00', '2009/8/24 5:00', '2009/8/24 6:00', '2009/8/24 7:00', '2009/8/24 8:00', '2009/8/24 9:00', '2009/8/24 10:00', '2009/8/24 11:00', '2009/8/24 12:00', '2009/8/24 13:00', '2009/8/24 14:00', '2009/8/24 15:00', '2009/8/24 16:00', '2009/8/24 17:00', '2009/8/24 18:00', '2009/8/24 19:00', '2009/8/24 20:00', '2009/8/24 21:00', '2009/8/24 22:00', '2009/8/24 23:00', '2009/8/25 0:00', '2009/8/25 1:00', '2009/8/25 2:00', '2009/8/25 3:00', '2009/8/25 4:00', '2009/8/25 5:00', '2009/8/25 6:00', '2009/8/25 7:00', '2009/8/25 8:00', '2009/8/25 9:00', '2009/8/25 10:00', '2009/8/25 11:00', '2009/8/25 12:00', '2009/8/25 13:00', '2009/8/25 14:00', '2009/8/25 15:00', '2009/8/25 16:00', '2009/8/25 17:00', '2009/8/25 18:00', '2009/8/25 19:00', '2009/8/25 20:00', '2009/8/25 21:00', '2009/8/25 22:00', '2009/8/25 23:00', '2009/8/26 0:00', '2009/8/26 1:00', '2009/8/26 2:00', '2009/8/26 3:00', '2009/8/26 4:00', '2009/8/26 5:00', '2009/8/26 6:00', '2009/8/26 7:00', '2009/8/26 8:00', '2009/8/26 9:00', '2009/8/26 10:00', '2009/8/26 11:00', '2009/8/26 12:00', '2009/8/26 13:00', '2009/8/26 14:00', '2009/8/26 15:00', '2009/8/26 16:00', '2009/8/26 17:00', '2009/8/26 18:00', '2009/8/26 19:00', '2009/8/26 20:00', '2009/8/26 21:00', '2009/8/26 22:00', '2009/8/26 23:00', '2009/8/27 0:00', '2009/8/27 1:00', '2009/8/27 2:00', '2009/8/27 3:00', '2009/8/27 4:00', '2009/8/27 5:00', '2009/8/27 6:00', '2009/8/27 7:00', '2009/8/27 8:00', '2009/8/27 9:00', '2009/8/27 10:00', '2009/8/27 11:00', '2009/8/27 12:00', '2009/8/27 13:00', '2009/8/27 14:00', '2009/8/27 15:00', '2009/8/27 16:00', '2009/8/27 17:00', '2009/8/27 18:00', '2009/8/27 19:00', '2009/8/27 20:00', '2009/8/27 21:00', '2009/8/27 22:00', '2009/8/27 23:00', '2009/8/28 0:00', '2009/8/28 1:00', '2009/8/28 2:00', '2009/8/28 3:00', '2009/8/28 4:00', '2009/8/28 5:00', '2009/8/28 6:00', '2009/8/28 7:00', '2009/8/28 8:00', '2009/8/28 9:00', '2009/8/28 10:00', '2009/8/28 11:00', '2009/8/28 12:00', '2009/8/28 13:00', '2009/8/28 14:00', '2009/8/28 15:00', '2009/8/28 16:00', '2009/8/28 17:00', '2009/8/28 18:00', '2009/8/28 19:00', '2009/8/28 20:00', '2009/8/28 21:00', '2009/8/28 22:00', '2009/8/28 23:00', '2009/8/29 0:00', '2009/8/29 1:00', '2009/8/29 2:00', '2009/8/29 3:00', '2009/8/29 4:00', '2009/8/29 5:00', '2009/8/29 6:00', '2009/8/29 7:00', '2009/8/29 8:00', '2009/8/29 9:00', '2009/8/29 10:00', '2009/8/29 11:00', '2009/8/29 12:00', '2009/8/29 13:00', '2009/8/29 14:00', '2009/8/29 15:00', '2009/8/29 16:00', '2009/8/29 17:00', '2009/8/29 18:00', '2009/8/29 19:00', '2009/8/29 20:00', '2009/8/29 21:00', '2009/8/29 22:00', '2009/8/29 23:00', '2009/8/30 0:00', '2009/8/30 1:00', '2009/8/30 2:00', '2009/8/30 3:00', '2009/8/30 4:00', '2009/8/30 5:00', '2009/8/30 6:00', '2009/8/30 7:00', '2009/8/30 8:00', '2009/8/30 9:00', '2009/8/30 10:00', '2009/8/30 11:00', '2009/8/30 12:00', '2009/8/30 13:00', '2009/8/30 14:00', '2009/8/30 15:00', '2009/8/30 16:00', '2009/8/30 17:00', '2009/8/30 18:00', '2009/8/30 19:00', '2009/8/30 20:00', '2009/8/30 21:00', '2009/8/30 22:00', '2009/8/30 23:00', '2009/8/31 0:00', '2009/8/31 1:00', '2009/8/31 2:00', '2009/8/31 3:00', '2009/8/31 4:00', '2009/8/31 5:00', '2009/8/31 6:00', '2009/8/31 7:00', '2009/8/31 8:00', '2009/8/31 9:00', '2009/8/31 10:00', '2009/8/31 11:00', '2009/8/31 12:00', '2009/8/31 13:00', '2009/8/31 14:00', '2009/8/31 15:00', '2009/8/31 16:00', '2009/8/31 17:00', '2009/8/31 18:00', '2009/8/31 19:00', '2009/8/31 20:00', '2009/8/31 21:00', '2009/8/31 22:00', '2009/8/31 23:00',
+    '2009/9/1 0:00', '2009/9/1 1:00', '2009/9/1 2:00', '2009/9/1 3:00', '2009/9/1 4:00', '2009/9/1 5:00', '2009/9/1 6:00', '2009/9/1 7:00', '2009/9/1 8:00', '2009/9/1 9:00', '2009/9/1 10:00', '2009/9/1 11:00', '2009/9/1 12:00', '2009/9/1 13:00', '2009/9/1 14:00', '2009/9/1 15:00', '2009/9/1 16:00', '2009/9/1 17:00', '2009/9/1 18:00', '2009/9/1 19:00', '2009/9/1 20:00', '2009/9/1 21:00', '2009/9/1 22:00', '2009/9/1 23:00', '2009/9/2 0:00', '2009/9/2 1:00', '2009/9/2 2:00', '2009/9/2 3:00', '2009/9/2 4:00', '2009/9/2 5:00', '2009/9/2 6:00', '2009/9/2 7:00', '2009/9/2 8:00', '2009/9/2 9:00', '2009/9/2 10:00', '2009/9/2 11:00', '2009/9/2 12:00', '2009/9/2 13:00', '2009/9/2 14:00', '2009/9/2 15:00', '2009/9/2 16:00', '2009/9/2 17:00', '2009/9/2 18:00', '2009/9/2 19:00', '2009/9/2 20:00', '2009/9/2 21:00', '2009/9/2 22:00', '2009/9/2 23:00', '2009/9/3 0:00', '2009/9/3 1:00', '2009/9/3 2:00', '2009/9/3 3:00', '2009/9/3 4:00', '2009/9/3 5:00', '2009/9/3 6:00', '2009/9/3 7:00', '2009/9/3 8:00', '2009/9/3 9:00', '2009/9/3 10:00', '2009/9/3 11:00', '2009/9/3 12:00', '2009/9/3 13:00', '2009/9/3 14:00', '2009/9/3 15:00', '2009/9/3 16:00', '2009/9/3 17:00', '2009/9/3 18:00', '2009/9/3 19:00', '2009/9/3 20:00', '2009/9/3 21:00', '2009/9/3 22:00', '2009/9/3 23:00', '2009/9/4 0:00', '2009/9/4 1:00', '2009/9/4 2:00', '2009/9/4 3:00', '2009/9/4 4:00', '2009/9/4 5:00', '2009/9/4 6:00', '2009/9/4 7:00', '2009/9/4 8:00', '2009/9/4 9:00', '2009/9/4 10:00', '2009/9/4 11:00', '2009/9/4 12:00', '2009/9/4 13:00', '2009/9/4 14:00', '2009/9/4 15:00', '2009/9/4 16:00', '2009/9/4 17:00', '2009/9/4 18:00', '2009/9/4 19:00', '2009/9/4 20:00', '2009/9/4 21:00', '2009/9/4 22:00', '2009/9/4 23:00', '2009/9/5 0:00', '2009/9/5 1:00', '2009/9/5 2:00', '2009/9/5 3:00', '2009/9/5 4:00', '2009/9/5 5:00', '2009/9/5 6:00', '2009/9/5 7:00', '2009/9/5 8:00', '2009/9/5 9:00', '2009/9/5 10:00', '2009/9/5 11:00', '2009/9/5 12:00', '2009/9/5 13:00', '2009/9/5 14:00', '2009/9/5 15:00', '2009/9/5 16:00', '2009/9/5 17:00', '2009/9/5 18:00', '2009/9/5 19:00', '2009/9/5 20:00', '2009/9/5 21:00', '2009/9/5 22:00', '2009/9/5 23:00', '2009/9/6 0:00', '2009/9/6 1:00', '2009/9/6 2:00', '2009/9/6 3:00', '2009/9/6 4:00', '2009/9/6 5:00', '2009/9/6 6:00', '2009/9/6 7:00', '2009/9/6 8:00', '2009/9/6 9:00', '2009/9/6 10:00', '2009/9/6 11:00', '2009/9/6 12:00', '2009/9/6 13:00', '2009/9/6 14:00', '2009/9/6 15:00', '2009/9/6 16:00', '2009/9/6 17:00', '2009/9/6 18:00', '2009/9/6 19:00', '2009/9/6 20:00', '2009/9/6 21:00', '2009/9/6 22:00', '2009/9/6 23:00', '2009/9/7 0:00', '2009/9/7 1:00', '2009/9/7 2:00', '2009/9/7 3:00', '2009/9/7 4:00', '2009/9/7 5:00', '2009/9/7 6:00', '2009/9/7 7:00', '2009/9/7 8:00', '2009/9/7 9:00', '2009/9/7 10:00', '2009/9/7 11:00', '2009/9/7 12:00', '2009/9/7 13:00', '2009/9/7 14:00', '2009/9/7 15:00', '2009/9/7 16:00', '2009/9/7 17:00', '2009/9/7 18:00', '2009/9/7 19:00', '2009/9/7 20:00', '2009/9/7 21:00', '2009/9/7 22:00', '2009/9/7 23:00', '2009/9/8 0:00', '2009/9/8 1:00', '2009/9/8 2:00', '2009/9/8 3:00', '2009/9/8 4:00', '2009/9/8 5:00', '2009/9/8 6:00', '2009/9/8 7:00', '2009/9/8 8:00', '2009/9/8 9:00', '2009/9/8 10:00', '2009/9/8 11:00', '2009/9/8 12:00', '2009/9/8 13:00', '2009/9/8 14:00', '2009/9/8 15:00', '2009/9/8 16:00', '2009/9/8 17:00', '2009/9/8 18:00', '2009/9/8 19:00', '2009/9/8 20:00', '2009/9/8 21:00', '2009/9/8 22:00', '2009/9/8 23:00', '2009/9/9 0:00', '2009/9/9 1:00', '2009/9/9 2:00', '2009/9/9 3:00', '2009/9/9 4:00', '2009/9/9 5:00', '2009/9/9 6:00', '2009/9/9 7:00', '2009/9/9 8:00', '2009/9/9 9:00', '2009/9/9 10:00', '2009/9/9 11:00', '2009/9/9 12:00', '2009/9/9 13:00', '2009/9/9 14:00', '2009/9/9 15:00', '2009/9/9 16:00', '2009/9/9 17:00', '2009/9/9 18:00', '2009/9/9 19:00', '2009/9/9 20:00', '2009/9/9 21:00', '2009/9/9 22:00', '2009/9/9 23:00', '2009/9/10 0:00', '2009/9/10 1:00', '2009/9/10 2:00', '2009/9/10 3:00', '2009/9/10 4:00', '2009/9/10 5:00', '2009/9/10 6:00', '2009/9/10 7:00', '2009/9/10 8:00', '2009/9/10 9:00', '2009/9/10 10:00', '2009/9/10 11:00', '2009/9/10 12:00', '2009/9/10 13:00', '2009/9/10 14:00', '2009/9/10 15:00', '2009/9/10 16:00', '2009/9/10 17:00', '2009/9/10 18:00', '2009/9/10 19:00', '2009/9/10 20:00', '2009/9/10 21:00', '2009/9/10 22:00', '2009/9/10 23:00', '2009/9/11 0:00', '2009/9/11 1:00', '2009/9/11 2:00', '2009/9/11 3:00', '2009/9/11 4:00', '2009/9/11 5:00', '2009/9/11 6:00', '2009/9/11 7:00', '2009/9/11 8:00', '2009/9/11 9:00', '2009/9/11 10:00', '2009/9/11 11:00', '2009/9/11 12:00', '2009/9/11 13:00', '2009/9/11 14:00', '2009/9/11 15:00', '2009/9/11 16:00', '2009/9/11 17:00', '2009/9/11 18:00', '2009/9/11 19:00', '2009/9/11 20:00', '2009/9/11 21:00', '2009/9/11 22:00', '2009/9/11 23:00', '2009/9/12 0:00', '2009/9/12 1:00', '2009/9/12 2:00', '2009/9/12 3:00', '2009/9/12 4:00', '2009/9/12 5:00', '2009/9/12 6:00', '2009/9/12 7:00', '2009/9/12 8:00', '2009/9/12 9:00', '2009/9/12 10:00', '2009/9/12 11:00', '2009/9/12 12:00', '2009/9/12 13:00', '2009/9/12 14:00', '2009/9/12 15:00', '2009/9/12 16:00', '2009/9/12 17:00', '2009/9/12 18:00', '2009/9/12 19:00', '2009/9/12 20:00', '2009/9/12 21:00', '2009/9/12 22:00', '2009/9/12 23:00', '2009/9/13 0:00', '2009/9/13 1:00', '2009/9/13 2:00', '2009/9/13 3:00', '2009/9/13 4:00', '2009/9/13 5:00', '2009/9/13 6:00', '2009/9/13 7:00', '2009/9/13 8:00', '2009/9/13 9:00', '2009/9/13 10:00', '2009/9/13 11:00', '2009/9/13 12:00', '2009/9/13 13:00', '2009/9/13 14:00', '2009/9/13 15:00', '2009/9/13 16:00', '2009/9/13 17:00', '2009/9/13 18:00', '2009/9/13 19:00', '2009/9/13 20:00', '2009/9/13 21:00', '2009/9/13 22:00', '2009/9/13 23:00', '2009/9/14 0:00', '2009/9/14 1:00', '2009/9/14 2:00', '2009/9/14 3:00', '2009/9/14 4:00', '2009/9/14 5:00', '2009/9/14 6:00', '2009/9/14 7:00', '2009/9/14 8:00', '2009/9/14 9:00', '2009/9/14 10:00', '2009/9/14 11:00', '2009/9/14 12:00', '2009/9/14 13:00', '2009/9/14 14:00', '2009/9/14 15:00', '2009/9/14 16:00', '2009/9/14 17:00', '2009/9/14 18:00', '2009/9/14 19:00', '2009/9/14 20:00', '2009/9/14 21:00', '2009/9/14 22:00', '2009/9/14 23:00', '2009/9/15 0:00', '2009/9/15 1:00', '2009/9/15 2:00', '2009/9/15 3:00', '2009/9/15 4:00', '2009/9/15 5:00', '2009/9/15 6:00', '2009/9/15 7:00', '2009/9/15 8:00', '2009/9/15 9:00', '2009/9/15 10:00', '2009/9/15 11:00', '2009/9/15 12:00', '2009/9/15 13:00', '2009/9/15 14:00', '2009/9/15 15:00', '2009/9/15 16:00', '2009/9/15 17:00', '2009/9/15 18:00', '2009/9/15 19:00', '2009/9/15 20:00', '2009/9/15 21:00', '2009/9/15 22:00', '2009/9/15 23:00', '2009/9/16 0:00', '2009/9/16 1:00', '2009/9/16 2:00', '2009/9/16 3:00', '2009/9/16 4:00', '2009/9/16 5:00', '2009/9/16 6:00', '2009/9/16 7:00', '2009/9/16 8:00', '2009/9/16 9:00', '2009/9/16 10:00', '2009/9/16 11:00', '2009/9/16 12:00', '2009/9/16 13:00', '2009/9/16 14:00', '2009/9/16 15:00', '2009/9/16 16:00', '2009/9/16 17:00', '2009/9/16 18:00', '2009/9/16 19:00', '2009/9/16 20:00', '2009/9/16 21:00', '2009/9/16 22:00', '2009/9/16 23:00', '2009/9/17 0:00', '2009/9/17 1:00', '2009/9/17 2:00', '2009/9/17 3:00', '2009/9/17 4:00', '2009/9/17 5:00', '2009/9/17 6:00', '2009/9/17 7:00', '2009/9/17 8:00', '2009/9/17 9:00', '2009/9/17 10:00', '2009/9/17 11:00', '2009/9/17 12:00', '2009/9/17 13:00', '2009/9/17 14:00', '2009/9/17 15:00', '2009/9/17 16:00', '2009/9/17 17:00', '2009/9/17 18:00', '2009/9/17 19:00', '2009/9/17 20:00', '2009/9/17 21:00', '2009/9/17 22:00', '2009/9/17 23:00', '2009/9/18 0:00', '2009/9/18 1:00', '2009/9/18 2:00', '2009/9/18 3:00', '2009/9/18 4:00', '2009/9/18 5:00', '2009/9/18 6:00', '2009/9/18 7:00', '2009/9/18 8:00', '2009/9/18 9:00', '2009/9/18 10:00', '2009/9/18 11:00', '2009/9/18 12:00', '2009/9/18 13:00', '2009/9/18 14:00', '2009/9/18 15:00', '2009/9/18 16:00', '2009/9/18 17:00', '2009/9/18 18:00', '2009/9/18 19:00', '2009/9/18 20:00', '2009/9/18 21:00', '2009/9/18 22:00', '2009/9/18 23:00', '2009/9/19 0:00', '2009/9/19 1:00', '2009/9/19 2:00', '2009/9/19 3:00', '2009/9/19 4:00', '2009/9/19 5:00', '2009/9/19 6:00', '2009/9/19 7:00', '2009/9/19 8:00', '2009/9/19 9:00', '2009/9/19 10:00', '2009/9/19 11:00', '2009/9/19 12:00', '2009/9/19 13:00', '2009/9/19 14:00', '2009/9/19 15:00', '2009/9/19 16:00', '2009/9/19 17:00', '2009/9/19 18:00', '2009/9/19 19:00', '2009/9/19 20:00', '2009/9/19 21:00', '2009/9/19 22:00', '2009/9/19 23:00', '2009/9/20 0:00', '2009/9/20 1:00', '2009/9/20 2:00', '2009/9/20 3:00', '2009/9/20 4:00', '2009/9/20 5:00', '2009/9/20 6:00', '2009/9/20 7:00', '2009/9/20 8:00', '2009/9/20 9:00', '2009/9/20 10:00', '2009/9/20 11:00', '2009/9/20 12:00', '2009/9/20 13:00', '2009/9/20 14:00', '2009/9/20 15:00', '2009/9/20 16:00', '2009/9/20 17:00', '2009/9/20 18:00', '2009/9/20 19:00', '2009/9/20 20:00', '2009/9/20 21:00', '2009/9/20 22:00', '2009/9/20 23:00', '2009/9/21 0:00', '2009/9/21 1:00', '2009/9/21 2:00', '2009/9/21 3:00', '2009/9/21 4:00', '2009/9/21 5:00', '2009/9/21 6:00', '2009/9/21 7:00', '2009/9/21 8:00', '2009/9/21 9:00', '2009/9/21 10:00', '2009/9/21 11:00', '2009/9/21 12:00', '2009/9/21 13:00', '2009/9/21 14:00', '2009/9/21 15:00', '2009/9/21 16:00', '2009/9/21 17:00', '2009/9/21 18:00', '2009/9/21 19:00', '2009/9/21 20:00', '2009/9/21 21:00', '2009/9/21 22:00', '2009/9/21 23:00', '2009/9/22 0:00', '2009/9/22 1:00', '2009/9/22 2:00', '2009/9/22 3:00', '2009/9/22 4:00', '2009/9/22 5:00', '2009/9/22 6:00', '2009/9/22 7:00', '2009/9/22 8:00', '2009/9/22 9:00', '2009/9/22 10:00', '2009/9/22 11:00', '2009/9/22 12:00', '2009/9/22 13:00', '2009/9/22 14:00', '2009/9/22 15:00', '2009/9/22 16:00', '2009/9/22 17:00', '2009/9/22 18:00', '2009/9/22 19:00', '2009/9/22 20:00', '2009/9/22 21:00', '2009/9/22 22:00', '2009/9/22 23:00', '2009/9/23 0:00', '2009/9/23 1:00', '2009/9/23 2:00', '2009/9/23 3:00', '2009/9/23 4:00', '2009/9/23 5:00', '2009/9/23 6:00', '2009/9/23 7:00', '2009/9/23 8:00', '2009/9/23 9:00', '2009/9/23 10:00', '2009/9/23 11:00', '2009/9/23 12:00', '2009/9/23 13:00', '2009/9/23 14:00', '2009/9/23 15:00', '2009/9/23 16:00', '2009/9/23 17:00', '2009/9/23 18:00', '2009/9/23 19:00', '2009/9/23 20:00', '2009/9/23 21:00', '2009/9/23 22:00', '2009/9/23 23:00', '2009/9/24 0:00', '2009/9/24 1:00', '2009/9/24 2:00', '2009/9/24 3:00', '2009/9/24 4:00', '2009/9/24 5:00', '2009/9/24 6:00', '2009/9/24 7:00', '2009/9/24 8:00', '2009/9/24 9:00', '2009/9/24 10:00', '2009/9/24 11:00', '2009/9/24 12:00', '2009/9/24 13:00', '2009/9/24 14:00', '2009/9/24 15:00', '2009/9/24 16:00', '2009/9/24 17:00', '2009/9/24 18:00', '2009/9/24 19:00', '2009/9/24 20:00', '2009/9/24 21:00', '2009/9/24 22:00', '2009/9/24 23:00', '2009/9/25 0:00', '2009/9/25 1:00', '2009/9/25 2:00', '2009/9/25 3:00', '2009/9/25 4:00', '2009/9/25 5:00', '2009/9/25 6:00', '2009/9/25 7:00', '2009/9/25 8:00', '2009/9/25 9:00', '2009/9/25 10:00', '2009/9/25 11:00', '2009/9/25 12:00', '2009/9/25 13:00', '2009/9/25 14:00', '2009/9/25 15:00', '2009/9/25 16:00', '2009/9/25 17:00', '2009/9/25 18:00', '2009/9/25 19:00', '2009/9/25 20:00', '2009/9/25 21:00', '2009/9/25 22:00', '2009/9/25 23:00', '2009/9/26 0:00', '2009/9/26 1:00', '2009/9/26 2:00', '2009/9/26 3:00', '2009/9/26 4:00', '2009/9/26 5:00', '2009/9/26 6:00', '2009/9/26 7:00', '2009/9/26 8:00', '2009/9/26 9:00', '2009/9/26 10:00', '2009/9/26 11:00', '2009/9/26 12:00', '2009/9/26 13:00', '2009/9/26 14:00', '2009/9/26 15:00', '2009/9/26 16:00', '2009/9/26 17:00', '2009/9/26 18:00', '2009/9/26 19:00', '2009/9/26 20:00', '2009/9/26 21:00', '2009/9/26 22:00', '2009/9/26 23:00', '2009/9/27 0:00', '2009/9/27 1:00', '2009/9/27 2:00', '2009/9/27 3:00', '2009/9/27 4:00', '2009/9/27 5:00', '2009/9/27 6:00', '2009/9/27 7:00', '2009/9/27 8:00', '2009/9/27 9:00', '2009/9/27 10:00', '2009/9/27 11:00', '2009/9/27 12:00', '2009/9/27 13:00', '2009/9/27 14:00', '2009/9/27 15:00', '2009/9/27 16:00', '2009/9/27 17:00', '2009/9/27 18:00', '2009/9/27 19:00', '2009/9/27 20:00', '2009/9/27 21:00', '2009/9/27 22:00', '2009/9/27 23:00', '2009/9/28 0:00', '2009/9/28 1:00', '2009/9/28 2:00', '2009/9/28 3:00', '2009/9/28 4:00', '2009/9/28 5:00', '2009/9/28 6:00', '2009/9/28 7:00', '2009/9/28 8:00', '2009/9/28 9:00', '2009/9/28 10:00', '2009/9/28 11:00', '2009/9/28 12:00', '2009/9/28 13:00', '2009/9/28 14:00', '2009/9/28 15:00', '2009/9/28 16:00', '2009/9/28 17:00', '2009/9/28 18:00', '2009/9/28 19:00', '2009/9/28 20:00', '2009/9/28 21:00', '2009/9/28 22:00', '2009/9/28 23:00', '2009/9/29 0:00', '2009/9/29 1:00', '2009/9/29 2:00', '2009/9/29 3:00', '2009/9/29 4:00', '2009/9/29 5:00', '2009/9/29 6:00', '2009/9/29 7:00', '2009/9/29 8:00', '2009/9/29 9:00', '2009/9/29 10:00', '2009/9/29 11:00', '2009/9/29 12:00', '2009/9/29 13:00', '2009/9/29 14:00', '2009/9/29 15:00', '2009/9/29 16:00', '2009/9/29 17:00', '2009/9/29 18:00', '2009/9/29 19:00', '2009/9/29 20:00', '2009/9/29 21:00', '2009/9/29 22:00', '2009/9/29 23:00', '2009/9/30 0:00', '2009/9/30 1:00', '2009/9/30 2:00', '2009/9/30 3:00', '2009/9/30 4:00', '2009/9/30 5:00', '2009/9/30 6:00', '2009/9/30 7:00', '2009/9/30 8:00', '2009/9/30 9:00', '2009/9/30 10:00', '2009/9/30 11:00', '2009/9/30 12:00', '2009/9/30 13:00', '2009/9/30 14:00', '2009/9/30 15:00', '2009/9/30 16:00', '2009/9/30 17:00', '2009/9/30 18:00', '2009/9/30 19:00', '2009/9/30 20:00', '2009/9/30 21:00', '2009/9/30 22:00', '2009/9/30 23:00',
+    '2009/10/1 0:00', '2009/10/1 1:00', '2009/10/1 2:00', '2009/10/1 3:00', '2009/10/1 4:00', '2009/10/1 5:00', '2009/10/1 6:00', '2009/10/1 7:00', '2009/10/1 8:00', '2009/10/1 9:00', '2009/10/1 10:00', '2009/10/1 11:00', '2009/10/1 12:00', '2009/10/1 13:00', '2009/10/1 14:00', '2009/10/1 15:00', '2009/10/1 16:00', '2009/10/1 17:00', '2009/10/1 18:00', '2009/10/1 19:00', '2009/10/1 20:00', '2009/10/1 21:00', '2009/10/1 22:00', '2009/10/1 23:00', '2009/10/2 0:00', '2009/10/2 1:00', '2009/10/2 2:00', '2009/10/2 3:00', '2009/10/2 4:00', '2009/10/2 5:00', '2009/10/2 6:00', '2009/10/2 7:00', '2009/10/2 8:00', '2009/10/2 9:00', '2009/10/2 10:00', '2009/10/2 11:00', '2009/10/2 12:00', '2009/10/2 13:00', '2009/10/2 14:00', '2009/10/2 15:00', '2009/10/2 16:00', '2009/10/2 17:00', '2009/10/2 18:00', '2009/10/2 19:00', '2009/10/2 20:00', '2009/10/2 21:00', '2009/10/2 22:00', '2009/10/2 23:00', '2009/10/3 0:00', '2009/10/3 1:00', '2009/10/3 2:00', '2009/10/3 3:00', '2009/10/3 4:00', '2009/10/3 5:00', '2009/10/3 6:00', '2009/10/3 7:00', '2009/10/3 8:00', '2009/10/3 9:00', '2009/10/3 10:00', '2009/10/3 11:00', '2009/10/3 12:00', '2009/10/3 13:00', '2009/10/3 14:00', '2009/10/3 15:00', '2009/10/3 16:00', '2009/10/3 17:00', '2009/10/3 18:00', '2009/10/3 19:00', '2009/10/3 20:00', '2009/10/3 21:00', '2009/10/3 22:00', '2009/10/3 23:00', '2009/10/4 0:00', '2009/10/4 1:00', '2009/10/4 2:00', '2009/10/4 3:00', '2009/10/4 4:00', '2009/10/4 5:00', '2009/10/4 6:00', '2009/10/4 7:00', '2009/10/4 8:00', '2009/10/4 9:00', '2009/10/4 10:00', '2009/10/4 11:00', '2009/10/4 12:00', '2009/10/4 13:00', '2009/10/4 14:00', '2009/10/4 15:00', '2009/10/4 16:00', '2009/10/4 17:00', '2009/10/4 18:00', '2009/10/4 19:00', '2009/10/4 20:00', '2009/10/4 21:00', '2009/10/4 22:00', '2009/10/4 23:00', '2009/10/5 0:00', '2009/10/5 1:00', '2009/10/5 2:00', '2009/10/5 3:00', '2009/10/5 4:00', '2009/10/5 5:00', '2009/10/5 6:00', '2009/10/5 7:00', '2009/10/5 8:00', '2009/10/5 9:00', '2009/10/5 10:00', '2009/10/5 11:00', '2009/10/5 12:00', '2009/10/5 13:00', '2009/10/5 14:00', '2009/10/5 15:00', '2009/10/5 16:00', '2009/10/5 17:00', '2009/10/5 18:00', '2009/10/5 19:00', '2009/10/5 20:00', '2009/10/5 21:00', '2009/10/5 22:00', '2009/10/5 23:00', '2009/10/6 0:00', '2009/10/6 1:00', '2009/10/6 2:00', '2009/10/6 3:00', '2009/10/6 4:00', '2009/10/6 5:00', '2009/10/6 6:00', '2009/10/6 7:00', '2009/10/6 8:00', '2009/10/6 9:00', '2009/10/6 10:00', '2009/10/6 11:00', '2009/10/6 12:00', '2009/10/6 13:00', '2009/10/6 14:00', '2009/10/6 15:00', '2009/10/6 16:00', '2009/10/6 17:00', '2009/10/6 18:00', '2009/10/6 19:00', '2009/10/6 20:00', '2009/10/6 21:00', '2009/10/6 22:00', '2009/10/6 23:00', '2009/10/7 0:00', '2009/10/7 1:00', '2009/10/7 2:00', '2009/10/7 3:00', '2009/10/7 4:00', '2009/10/7 5:00', '2009/10/7 6:00', '2009/10/7 7:00', '2009/10/7 8:00', '2009/10/7 9:00', '2009/10/7 10:00', '2009/10/7 11:00', '2009/10/7 12:00', '2009/10/7 13:00', '2009/10/7 14:00', '2009/10/7 15:00', '2009/10/7 16:00', '2009/10/7 17:00', '2009/10/7 18:00', '2009/10/7 19:00', '2009/10/7 20:00', '2009/10/7 21:00', '2009/10/7 22:00', '2009/10/7 23:00', '2009/10/8 0:00', '2009/10/8 1:00', '2009/10/8 2:00', '2009/10/8 3:00', '2009/10/8 4:00', '2009/10/8 5:00', '2009/10/8 6:00', '2009/10/8 7:00', '2009/10/8 8:00', '2009/10/8 9:00', '2009/10/8 10:00', '2009/10/8 11:00', '2009/10/8 12:00', '2009/10/8 13:00', '2009/10/8 14:00', '2009/10/8 15:00', '2009/10/8 16:00', '2009/10/8 17:00', '2009/10/8 18:00', '2009/10/8 19:00', '2009/10/8 20:00', '2009/10/8 21:00', '2009/10/8 22:00', '2009/10/8 23:00', '2009/10/9 0:00', '2009/10/9 1:00', '2009/10/9 2:00', '2009/10/9 3:00', '2009/10/9 4:00', '2009/10/9 5:00', '2009/10/9 6:00', '2009/10/9 7:00', '2009/10/9 8:00', '2009/10/9 9:00', '2009/10/9 10:00', '2009/10/9 11:00', '2009/10/9 12:00', '2009/10/9 13:00', '2009/10/9 14:00', '2009/10/9 15:00', '2009/10/9 16:00', '2009/10/9 17:00', '2009/10/9 18:00', '2009/10/9 19:00', '2009/10/9 20:00', '2009/10/9 21:00', '2009/10/9 22:00', '2009/10/9 23:00', '2009/10/10 0:00', '2009/10/10 1:00', '2009/10/10 2:00', '2009/10/10 3:00', '2009/10/10 4:00', '2009/10/10 5:00', '2009/10/10 6:00', '2009/10/10 7:00', '2009/10/10 8:00', '2009/10/10 9:00', '2009/10/10 10:00', '2009/10/10 11:00', '2009/10/10 12:00', '2009/10/10 13:00', '2009/10/10 14:00', '2009/10/10 15:00', '2009/10/10 16:00', '2009/10/10 17:00', '2009/10/10 18:00', '2009/10/10 19:00', '2009/10/10 20:00', '2009/10/10 21:00', '2009/10/10 22:00', '2009/10/10 23:00', '2009/10/11 0:00', '2009/10/11 1:00', '2009/10/11 2:00', '2009/10/11 3:00', '2009/10/11 4:00', '2009/10/11 5:00', '2009/10/11 6:00', '2009/10/11 7:00', '2009/10/11 8:00', '2009/10/11 9:00', '2009/10/11 10:00', '2009/10/11 11:00', '2009/10/11 12:00', '2009/10/11 13:00', '2009/10/11 14:00', '2009/10/11 15:00', '2009/10/11 16:00', '2009/10/11 17:00', '2009/10/11 18:00', '2009/10/11 19:00', '2009/10/11 20:00', '2009/10/11 21:00', '2009/10/11 22:00', '2009/10/11 23:00', '2009/10/12 0:00', '2009/10/12 1:00', '2009/10/12 2:00', '2009/10/12 3:00', '2009/10/12 4:00', '2009/10/12 5:00', '2009/10/12 6:00', '2009/10/12 7:00', '2009/10/12 8:00', '2009/10/12 9:00', '2009/10/12 10:00', '2009/10/12 11:00', '2009/10/12 12:00', '2009/10/12 13:00', '2009/10/12 14:00', '2009/10/12 15:00', '2009/10/12 16:00', '2009/10/12 17:00', '2009/10/12 18:00', '2009/10/12 19:00', '2009/10/12 20:00', '2009/10/12 21:00', '2009/10/12 22:00', '2009/10/12 23:00', '2009/10/13 0:00', '2009/10/13 1:00', '2009/10/13 2:00', '2009/10/13 3:00', '2009/10/13 4:00', '2009/10/13 5:00', '2009/10/13 6:00', '2009/10/13 7:00', '2009/10/13 8:00', '2009/10/13 9:00', '2009/10/13 10:00', '2009/10/13 11:00', '2009/10/13 12:00', '2009/10/13 13:00', '2009/10/13 14:00', '2009/10/13 15:00', '2009/10/13 16:00', '2009/10/13 17:00', '2009/10/13 18:00', '2009/10/13 19:00', '2009/10/13 20:00', '2009/10/13 21:00', '2009/10/13 22:00', '2009/10/13 23:00', '2009/10/14 0:00', '2009/10/14 1:00', '2009/10/14 2:00', '2009/10/14 3:00', '2009/10/14 4:00', '2009/10/14 5:00', '2009/10/14 6:00', '2009/10/14 7:00', '2009/10/14 8:00', '2009/10/14 9:00', '2009/10/14 10:00', '2009/10/14 11:00', '2009/10/14 12:00', '2009/10/14 13:00', '2009/10/14 14:00', '2009/10/14 15:00', '2009/10/14 16:00', '2009/10/14 17:00', '2009/10/14 18:00', '2009/10/14 19:00', '2009/10/14 20:00', '2009/10/14 21:00', '2009/10/14 22:00', '2009/10/14 23:00', '2009/10/15 0:00', '2009/10/15 1:00', '2009/10/15 2:00', '2009/10/15 3:00', '2009/10/15 4:00', '2009/10/15 5:00', '2009/10/15 6:00', '2009/10/15 7:00', '2009/10/15 8:00', '2009/10/15 9:00', '2009/10/15 10:00', '2009/10/15 11:00', '2009/10/15 12:00', '2009/10/15 13:00', '2009/10/15 14:00', '2009/10/15 15:00', '2009/10/15 16:00', '2009/10/15 17:00', '2009/10/15 18:00', '2009/10/15 19:00', '2009/10/15 20:00', '2009/10/15 21:00', '2009/10/15 22:00', '2009/10/15 23:00', '2009/10/16 0:00', '2009/10/16 1:00', '2009/10/16 2:00', '2009/10/16 3:00', '2009/10/16 4:00', '2009/10/16 5:00', '2009/10/16 6:00', '2009/10/16 7:00', '2009/10/16 8:00', '2009/10/16 9:00', '2009/10/16 10:00', '2009/10/16 11:00', '2009/10/16 12:00', '2009/10/16 13:00', '2009/10/16 14:00', '2009/10/16 15:00', '2009/10/16 16:00', '2009/10/16 17:00', '2009/10/16 18:00', '2009/10/16 19:00', '2009/10/16 20:00', '2009/10/16 21:00', '2009/10/16 22:00', '2009/10/16 23:00', '2009/10/17 0:00', '2009/10/17 1:00', '2009/10/17 2:00', '2009/10/17 3:00', '2009/10/17 4:00', '2009/10/17 5:00', '2009/10/17 6:00', '2009/10/17 7:00', '2009/10/17 8:00', '2009/10/17 9:00', '2009/10/17 10:00', '2009/10/17 11:00', '2009/10/17 12:00', '2009/10/17 13:00', '2009/10/17 14:00', '2009/10/17 15:00', '2009/10/17 16:00', '2009/10/17 17:00', '2009/10/17 18:00', '2009/10/17 19:00', '2009/10/17 20:00', '2009/10/17 21:00', '2009/10/17 22:00', '2009/10/17 23:00', '2009/10/18 0:00', '2009/10/18 1:00', '2009/10/18 2:00', '2009/10/18 3:00', '2009/10/18 4:00', '2009/10/18 5:00', '2009/10/18 6:00', '2009/10/18 7:00', '2009/10/18 8:00'
+];
+
+timeData = timeData.map(function (str) {
+    return str.replace('2009/', '');
+});
+
+option = {
+    title: {
+        text: '雨量流量关系图',
+        subtext: '数据来自西安兰特水电测控技术有限公司',
+        left: 'center'
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            animation: false
+        }
+    },
+    legend: {
+        data: ['流量', '降雨量'],
+        left: 10
+    },
+    toolbox: {
+        feature: {
+            dataZoom: {
+                yAxisIndex: 'none'
+            },
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    axisPointer: {
+        link: [{
+            xAxisIndex: 'all'
+        }]
+    },
+    dataZoom: [
+        {
+            show: true,
+            realtime: true,
+            start: 30,
+            end: 70,
+            xAxisIndex: [0, 1]
+        },
+        {
+            type: 'inside',
+            realtime: true,
+            start: 30,
+            end: 70,
+            xAxisIndex: [0, 1]
+        }
+    ],
+    grid: [{
+        left: 50,
+        right: 50,
+        height: '35%'
+    }, {
+        left: 50,
+        right: 50,
+        top: '55%',
+        height: '35%'
+    }],
+    xAxis: [
+        {
+            type: 'category',
+            boundaryGap: false,
+            axisLine: {onZero: true},
+            data: timeData
+        },
+        {
+            gridIndex: 1,
+            type: 'category',
+            boundaryGap: false,
+            axisLine: {onZero: true},
+            data: timeData,
+            position: 'top'
+        }
+    ],
+    yAxis: [
+        {
+            name: '流量(m^3/s)',
+            type: 'value',
+            max: 500
+        },
+        {
+            gridIndex: 1,
+            name: '降雨量(mm)',
+            type: 'value',
+            inverse: true
+        }
+    ],
+    series: [
+        {
+            name: '流量',
+            type: 'line',
+            symbolSize: 8,
+            data: [
+                0.97,0.96,0.96,0.95,0.95,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.93,0.92,0.91,0.9,0.89,0.88,0.87,0.87,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.87,0.88,0.9,0.93,0.96,0.99,1.03,1.06,1.1,1.14,1.17,1.2,1.23,1.26,1.29,1.33,1.36,1.4,1.43,1.45,1.48,1.49,1.51,1.51,1.5,1.49,1.47,1.44,1.41,1.37,1.34,1.3,1.27,1.24,1.22,1.2,1.19,1.18,1.16,1.15,1.14,1.13,1.12,1.11,1.11,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.1,1.09,1.09,1.08,1.07,1.06,1.05,1.04,1.03,1.03,1.02,1.01,1.01,1,0.99,0.98,0.97,0.96,0.96,0.95,0.95,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.93,0.92,0.91,0.9,0.89,0.88,0.87,0.87,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.85,0.84,0.83,0.82,0.81,0.8,0.8,0.79,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.77,0.75,0.73,0.71,0.68,0.65,0.63,0.61,0.59,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.57,0.57,0.57,0.56,0.55,0.55,0.54,0.54,0.53,0.52,0.52,0.51,0.51,0.5,0.5,0.49,0.48,0.48,0.47,0.47,0.47,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.46,0.52,0.67,0.9,1.19,1.52,1.87,2.22,2.55,2.84,3.07,3.22,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.28,3.24,3.13,2.97,2.77,2.54,2.3,2.05,1.82,1.62,1.46,1.35,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.31,1.3,1.26,1.21,1.14,1.06,0.97,0.89,0.81,0.74,0.69,0.65,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.63,0.63,0.62,0.62,0.61,0.6,0.59,0.59,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.59,0.61,0.63,0.65,0.68,0.71,0.73,0.75,0.77,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.77,0.75,0.73,0.71,0.68,0.65,0.63,0.61,0.59,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.58,0.59,0.59,0.6,0.61,0.62,0.62,0.63,0.63,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.65,0.66,0.68,0.69,0.71,0.73,0.74,0.76,0.77,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.79,0.81,0.82,0.84,0.86,0.88,0.9,0.92,0.93,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.94,0.93,0.92,0.91,0.9,0.89,0.88,0.87,0.87,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.86,0.85,0.84,0.82,0.8,0.78,0.76,0.75,0.73,0.72,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.72,0.73,0.74,0.76,0.78,0.79,0.82,0.84,0.86,0.89,0.91,0.94,0.97,1,1.02,1.05,1.08,1.11,1.14,1.17,1.19,1.22,1.25,1.27,1.29,1.31,1.33,1.35,1.36,1.38,1.39,1.39,1.4,1.4,1.4,1.39,1.37,1.35,1.32,1.29,1.26,1.22,1.18,1.14,1.1,1.05,1.01,0.97,0.93,0.89,0.85,0.82,0.78,0.76,0.74,0.72,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.72,0.73,0.74,0.75,0.77,0.78,0.8,0.82,0.84,0.87,0.89,0.92,0.94,0.97,0.99,1.02,1.05,1.08,1.1,1.13,1.16,1.18,1.21,1.23,1.26,1.28,1.3,1.32,1.34,1.35,1.37,1.38,1.39,1.4,1.41,1.41,1.42,1.42,1.43,1.43,1.43,1.44,1.44,1.44,1.44,1.45,1.45,1.45,1.46,1.46,1.46,1.47,1.47,1.48,1.48,1.49,1.5,1.51,1.54,1.62,1.73,1.88,2.05,2.24,2.45,2.67,2.89,3.11,3.31,3.51,3.69,3.86,4.03,4.18,4.33,4.48,4.62,4.76,4.89,5.02,5.16,5.29,5.43,5.57,5.71,5.86,6.02,6.18,6.36,6.54,6.73,6.93,7.15,7.38,7.62,7.88,8.16,8.46,8.77,9.11,9.46,9.84,10.24,10.67,11.12,11.6,12.3,13.66,16,38.43,82.21,146.6,218.7,226,225.23,223.08,219.78,212,199.82,184.6,168,151.65,137.21,126.31,119.94,115.52,112.06,108.92,105.44,101,94.56,86.36,77.67,69.76,63.9,60.38,57.41,54.84,52.57,50.56,48.71,46.97,45.25,43.48,41.6,39.5,37.19,34.81,32.46,30.27,28.36,26.85,25.86,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.5,25.27,24.65,23.7,22.52,21.17,19.75,18.33,16.98,15.8,14.85,14.23,14,14.02,14.08,14.17,14.29,14.44,14.61,14.8,15.01,15.23,15.47,15.71,15.95,16.19,16.43,16.67,16.89,17.1,17.29,17.46,17.61,17.73,17.82,17.88,17.9,17.63,16.88,15.75,14.33,12.71,10.98,9.23,7.56,6.05,4.81,3.92,3.47,3.28,3.1,2.93,2.76,2.61,2.46,2.32,2.19,2.07,1.96,1.85,1.75,1.66,1.58,1.51,1.44,1.39,1.34,1.29,1.26,1.23,1.22,1.2,1.2,1.2,1.2,1.2,1.2,1.21,1.21,1.21,1.21,1.22,1.22,1.22,1.23,1.23,1.23,1.24,1.24,1.25,1.25,1.25,1.26,1.26,1.27,1.27,1.27,1.28,1.28,1.28,1.29,1.29,1.29,1.29,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.3,1.29,1.29,1.29,1.29,1.28,1.28,1.28,1.27,1.27,1.26,1.25,1.25,1.24,1.23,1.23,1.22,1.21,1.2,1.16,1.06,0.95,0.83,0.74,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.71,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.7,0.69,0.69,0.69,0.69,0.69,0.69,0.69,0.69,0.68,0.68,0.68,0.68,0.68,0.68,0.67,0.67,0.67,0.67,0.67,0.67,0.67,0.66,0.66,0.66,0.66,0.66,0.66,0.66,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.65,0.66,0.68,0.69,0.71,0.73,0.74,0.76,0.77,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.78,0.8,0.86,0.95,1.08,1.25,1.46,1.7,1.97,2.28,2.63,3.01,3.42,3.87,4.35,4.86,5.4,5.98,6.59,7.92,10.49,14.04,18.31,23.04,27.98,32.87,37.45,41.46,44.64,46.74,47.5,46.86,45.16,42.77,40.04,37.33,35,32.74,30.21,27.7,25.5,23.9,23.2,23.06,22.94,22.84,22.77,22.72,22.7,22.8,23.23,23.95,24.91,26.04,27.3,28.76,30.7,33.39,37.12,42.15,48.77,65.22,252.1,257,237.32,221.19,212,208.67,206.89,205.2,202.15,189.82,172,165.3,160.49,156.8,153.44,149.62,144.6,138.27,131,123.11,114.9,106.69,98.79,91.5,85.13,80,75.53,71.03,66.65,62.54,58.85,55.73,53.31,51.75,51.2,56.53,68.25,80,91.01,102.03,109,112.37,115.29,117.68,119.48,120.61,121,119.45,115.57,110.52,105.47,101.58,100,99.97,99.94,99.92,99.9,99.88,99.86,99.85,99.84,99.83,99.82,99.81,99.81,99.8,99.8,99.8,122.15,163.65,186,182.96,175.15,164.56,153.18,143,136,131.37,126.98,122.81,118.85,115.09,111.52,108.13,104.9,101.83,98.9,96.11,93.44,90.87,88.41,86.04,83.74,81.51,79.33,77.2,75.1,73.02,70.95,68.88,66.8,64.87,63.14,61.4,59.53,57.67,56,54.6,53.36,52.2,51.05,49.85,48.5,46.87,44.92,42.74,40.42,38.04,35.69,33.46,31.44,29.72,28.38,27.51,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.2,27.14,26.97,26.7,26.35,25.95,25.49,25.02,24.53,24.04,23.58,23.16,22.8,22.46,22.11,21.75,21.39,21.03,20.69,20.36,20.05,19.78,19.54,19.35,19.2,19.09,19,18.92,18.85,18.79,18.74,18.68,18.62,18.56,18.49,18.4,18.3,18.17,18.02,17.83,17.63,17.41,17.18,16.93,16.68,16.43,16.18,15.93,15.7,15.47,15.22,14.97,14.71,14.45,14.18,13.93,13.68,13.44,13.21,13,12.8,12.62,12.46,12.31,12.16,12.03,11.89,11.76,11.62,11.48,11.33,11.17,11,10.81,10.59,10.36,10.12,9.86,9.61,9.36,9.12,8.89,8.68,8.5,8.35,8.21,8.08,7.94,7.81,7.68,7.56,7.46,7.36,7.29,7.23,7.19,7.18,7.51,8.42,9.81,11.58,13.63,15.86,18.16,20.44,22.58,24.49,26.06,27.2,28.08,28.95,29.81,30.65,31.48,32.28,33.07,33.82,34.55,35.25,35.92,36.56,37.15,37.71,38.23,38.7,39.13,39.5,39.83,40.1,40.31,40.47,40.57,40.6,40.49,40.16,39.64,38.94,38.09,37.1,36,34.79,33.51,32.17,30.79,29.39,27.99,26.6,25.25,23.96,22.75,21.63,20.63,19.76,19.04,18.49,18.14,18,17.97,17.95,17.94,17.92,17.91,17.9,17.89,17.88,17.87,17.85,17.83,17.8,17.7,17.46,17.13,16.7,16.21,15.68,15.13,14.57,14.04,13.56,13.14,12.8,12.52,12.27,12.02,11.79,11.57,11.37,11.16,10.97,10.78,10.59,10.39,10.2,10.01,9.81,9.63,9.44,9.26,9.08,8.9,8.73,8.56,8.39,8.22,8.06,7.9,7.73,7.57,7.41,7.25,7.09,6.94,6.79,6.65,6.52,6.4,6.28,6.17,6.08,5.98,5.9,5.81,5.73,5.65,5.57,5.49,5.41,5.32,5.23,5.14,5.04,4.94,4.84,4.74,4.63,4.53,4.43,4.33,4.23,4.13,4.03,3.93,3.81,3.69,3.57,3.45,3.33,3.22,3.12,3.04,2.98,2.93,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.92,2.9,2.86,2.8,2.71,2.62,2.52,2.42,2.33,2.24,2.18,2.14,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.12,2.1,2.06,2,1.91,1.82,1.71,1.61,1.5,1.4,1.32,1.25,1.2,1.16,1.13,1.1,1.06,1.03,1,0.97,0.93,0.9,0.87,0.85,0.82,0.79,0.77,0.74,0.72,0.69,0.67,0.65,0.63,0.61,0.59,0.58,0.56,0.54,0.53,0.52,0.51,0.5,0.49,0.48,0.48,0.47,0.47,0.46,0.46,0.47,0.48,0.5,0.53,0.56,0.59,0.62,0.64,0.67,0.69,0.7,0.71,0.71,0.71,0.71,0.7,0.7,0.7,0.69,0.69,0.69,0.68,0.68,0.67,0.67,0.67,0.66,0.66,0.65,0.65,0.65,0.65,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.64,0.65,0.65,0.65,0.66,0.66,0.67,0.68,0.69,0.69,0.7,0.71,0.73,0.74,0.75,0.76,0.78,0.8,0.81,0.83,0.85,0.87,0.89,0.92,0.94,0.97,0.99,1.02,1.05,1.08,1.11,1.15,1.18,1.32,1.66,2.21,2.97,3.94,5.11,6.5,8.1,9.9,11.92,14.15,16.6,22.3,22.8,24.48,30.38,35.74,42.4,57.14,94.04,112.9,123.4,130.4,130,119.4,120.7,116.8,118.1,119.4,124.8,143.5,204,294,319.2,328.4,365,350.8,347.6,347.6,325,331.6,319.2,308,308,308,308,296.8,300,281,278.4,270.6,271,253.6,233.5,219.2,207.8,205.9,204,189.6,178.8,173.4,160,154.4,146,145,140.5,130.4,126.2,116.8,112.9,106.5,101.6,98.51,82.67,67.3,80.05,76.12,72.3,71.02,69.78,67.3,67.3,68.54,57.6,71.02,66.06,59.12,57.14,55.16,55.16,52.19,52.19,51.2,48.56,44.16,43,45.92,49.44,44.16,36.48,35.74,35,32.36,37.22,32.36,32.36,32.36,33.68,32.36,31.7,35.74,29.72,32.36,30.38,29.72,28.4,28.4,28.4,27.28,25.6,25.04,23.92,22.3,21.8,21.8,21.8,22.8,21.8,25.6,22.8,22.8,17.8,16.04,16.04,16.04,16.04,16.04,16.04,16.04,16.04,16.04,16.04,15.02,14,14.03,14.11,14.25,14.45,14.72,15.06,15.46,15.95,16.51,17.15,17.87,18.69,19.59,20.59,21.69,22.88,24.18,25.59,27.1,28.73,30.48,32.34,34.33,36.44,38.69,41.06,43.57,46.22,49.01,51.95,55.04,58.27,61.66,65.21,68.92,72.8,88.09,104.9,105.7,110.3,111.6,110.3,106.5,105.7,103.3,100,97.02,98.8,91.07,83.98,88.09,81.36,78.74,77.43,77.43,73.5,74.81,72.63,68.58,66.4,68.54,69.78,67.3,64.82,61.1,59.12,56.15,53.18,50.32,49.44,44.16,36.5,42.4,37.96,37.22,33.68,36.48,35.74,35,35,37.22,37.22,39.44,32.6,34.54,36.48,35.74,34.34,33.68,33.02,31.04,29.72,29.72,29.72,26.16,25.6,29.72,18.3,22.3,21.3,21.8,21.8,20.3,20.8,25.04,25.04,25.6,25.6,25.04,25.6,25.04,25.6,23.92,25.04,21.3,21.8,22.3,21.8,20.8,16.1,20.3,18.3,13.22,19.3,19.3,18.3,14.4,13.86,13.36,12.9,12.48,12.1,11.75,11.43,11.15,10.9,10.67,10.48,10.31,10.16,10.04,9.93,9.85,9.78,9.73,9.69,9.67,9.65,9.65,12.08,8.67,11.7,11.38,10.65,9.84,9.32,9.07,8.85,8.66,8.49,8.35,8.22,8.1,7.98,7.86,7.74,7.61,7.47,7.31,7.14,6.96,6.78,6.58,6.39,6.19,5.99,5.78,5.58,5.39,5.2,5.01,4.83,4.67,4.51,4.37,4.24,4.12,4.02,3.95,3.89,3.85,3.84,4.41,5.77,7.39,8.75,9.32,9.18,9,8.94,8.88,8.83,8.78,8.73,8.68,8.64,8.6,8.56,8.53,8.5,8.47,8.45,8.42,8.4,8.39,8.37,8.36,8.35,8.35,8.34,8.34,8.67,9.65,9.62,9.53,9.4,9.21,8.98,8.7,8.4,8.06,7.69,7.3,6.89,6.47,6.03,5.59,5.14,4.7,4.26,3.83,3.42,3.02,2.65,2.3,1.98,1.7,1.45,1.25,1.09,0.99,0.94,0.92,0.91,0.89,0.87,0.85,0.84,0.82,0.81,0.79,0.78,0.77,0.75,0.74,0.73,0.72,0.71,0.7,0.69,0.68,0.67,0.66,0.65,0.64,0.64,0.63,0.63,0.62,0.62,0.61,0.61,0.61,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.6,0.61,0.61,0.61,0.61,0.61,0.61,0.62,0.62,0.62,0.62,0.63,0.63,0.63,0.63,0.63,0.64,0.64,0.64,0.64,0.64,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.65,0.64,0.63,0.62,0.6,0.59,0.57,0.55,0.54,0.53,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.51,0.51,0.51,0.5,0.5,0.49,0.48,0.47,0.47,0.46,0.45,0.45,0.44,0.43,0.42,0.42,0.41,0.41,0.41,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.41,0.42,0.43,0.44,0.46,0.48,0.5,0.53,0.55,0.58,0.61,0.64,0.67,0.7,0.73,0.77,0.8,0.83,0.87,0.9,0.93,0.96,0.99,1.02,1.05,1.08,1.1,1.12,1.14,1.16,1.17,1.18,1.19,1.2,1.2,1.2,1.19,1.17,1.15,1.12,1.09,1.06,1.02,0.98,0.94,0.9,0.86,0.82,0.78,0.74,0.7,0.66,0.63,0.6,0.57,0.55,0.53,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.52,0.51,0.51,0.5,0.5,0.49,0.49,0.48,0.47,0.47,0.47,0.46,0.46,0.45,0.45,0.45,0.44,0.44,0.44,0.43,0.43,0.43,0.42,0.42,0.42,0.41,0.41,0.41,0.41,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.4,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.41,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.42,0.43,0.43,0.43,0.43,0.43,0.43,0.44,0.44,0.44,0.44,0.44,0.44,0.45,0.45,0.45
+            ]
+        },
+        {
+            name: '降雨量',
+            type: 'line',
+            xAxisIndex: 1,
+            yAxisIndex: 1,
+            symbolSize: 8,
+            data: [
+                0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,0.017,0.017,0.017,0.017,0.011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.021,0.026,0.03,0.036,0.036,0.195,0.221,0.019,0.013,0.017,0.03,0.03,0.03,0.046,0.045,0.038,0.084,0.045,0.045,0.037,0.034,0.035,0.036,0.044,0.052,0.048,0.109,0.033,0.029,0.04,0.042,0.042,0.042,0.073,0.076,0.062,0.066,0.066,0.075,0.096,0.128,0.121,0.128,0.14,0.226,0.143,0.097,0.018,0,0,0,0,0,0.018,0.047,0.054,0.054,0.054,0.036,0.185,0.009,0.038,0.061,0.077,0.091,0.126,0.69,0.182,0.349,0.231,0.146,0.128,0.167,0.1,0.075,0.071,0.071,0.117,0.01,0.002,0.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,0.026,0.038,0.038,0.038,0.076,0.086,0.109,0.213,0.276,0.288,0.297,0.642,1.799,1.236,2.138,0.921,0.497,0.685,0.828,0.41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.018,0.024,0.024,0.024,0.024,0.006,0.003,0.046,0.046,0.046,0.046,0.043,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.204,0.303,1.028,1.328,1.524,1.41,1.362,1.292,1.191,0.529,0.501,0.944,1.81,2.899,0.859,0.126,0.087,0.047,0,0,0,0,0.011,0.028,0.028,0.028,0.028,0.017,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.099,0.159,0.297,0.309,0.309,0.614,0.818,1.436,1.195,0.553,0.542,0.955,0.898,0.466,0.386,0.556,0.388,0.221,0.192,0.192,0.187,0.166,0.18,0.302,0.158,0.009,0.009,0.009,0.009,0.009,0.007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.004,0.032,0.032,0.032,0.032,0.082,0.149,0.204,0.247,0.262,0.49,0.51,0.533,0.746,0.847,2.393,1.188,1.114,0.475,0.043,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,0.017,0.021,0.042,0.079,0.111,0.126,0.122,0.133,0.846,0.102,0.077,0.067,0.056,0.005,0,0,0,0,0,0,0,0,0,0,0,0,0,0.011,0.017,0.017,0.017,0.017,0.006,0,0,0,0,0,0.01,0.03,0.054,0.067,0.07,0.25,0.251,0.494,0.065,0.054,0.054,0.064,0.084,0.077,0.101,0.132,0.248,0.069,0.117,0.115,0.087,0.326,0.036,0.009,0.009,0.009,0.009,0.009,0.004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.02,0.039,0.04,0.04,0.04,0.229,0.079,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.023,0.069,0.082,0.082,0.082,0.503,0.774,0.038,0.012,0.012,0.012,0.016,0.02,0.028,0.051,0.06,0.064,0.19,0.15,0.164,0.139,0.13,0.085,0.031,0.023,0.022,0.007,0.005,0.005,0.001,0,0.02,0.048,0.048,0.053,0.056,0.036,0.008,0.008,0.004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.013,0.017,0.036,0.068,0.095,0.233,0.272,0.377,0.722,1.494,3.756,0.954,0.439,0.442,0.462,0.373,0.249,0.214,0.1,0.044,0.037,0.023,0.002,0,0,0,0,0,0,0.02,0.024,0.024,0.024,0.024,0.004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.008,0.017,0.017,0.045,0.186,0.308,0.241,0.241,0.893,4.067,4.494,5.015,3.494,2.057,1.411,0.718,0.407,0.313,0.339,1.537,1.105,0.218,0.136,0.03,0.005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.037,0.448,1.2,1.309,1.309,1.425,1.223,0.471,0.767,0.423,0.273,0.412,0.646,0.481,0.239,0.131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.044,0.15,0.223,0.388,0.513,0.883,2.828,4.786,5.959,4.95,6.434,6.319,3.35,2.806,4.204,1.395,1.015,1.015,0.836,0.74,0.72,0.615,0.477,0.192,0.046,0.007,0.007,0.007,0.007,0.007,0.007,0.007,0.008,0.005,0.005,0.005,0.005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.001,0.012,0.012,0.012,0.012,0.011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.002,0.012,0.028,0.028,0.028,0.138,0.092,0.082,0.082,0.096,0.719,0.155,0.042,0.047,0.129,0.021,0.021,0.014,0.009,0.029,0.067,0.088,0.095,0.095,0.138,0.091,0.032,0.025,0.025,0.003,0,0,0,0,0,0,0,0,0,0,0,0,0.002,0.045,0.228,0.297,0.325,0.339,0.581,1.244,0.796,0.517,0.227,0.053,0.006,0,0,0,0,0,0,0,0,0,0.003,0.005,0.005,0.005,0.005,0.081,0.129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.014,0.041,0.041,0.041,0.041,0.027,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.009,0.017,0.017,0.017,0.017,0.355,0.174,0.009,0.009,0.012,0.136,0.208,0.208,0.208,0.215,7.359,1.858,0.458,0.053,0.053,0.047,0.045,0.045,0.059,0.136,0.188,0.206,0.21,0.588,1.517,6.02,4.688,4.42,0.624,0.326,0.359,0.553,0.899,0.94,2.95,9.415,5.752,1.092,0.096,0.035,0.026,0.018,0.015,0.011,0.011,0.011,0,0,0,0,0,0,0,0,0,0,0,0.056,0.27,0.314,0.351,0.354,0.609,0.796,1.857,0.848,0.538,0.214,0.178,0.178,0.201,0.231,0.227,0.272,0.397,0.45,1.014,2.917,1.675,0.081,0.059,0.059,0.148,0.075,0.075,0.078,0.236,0.784,0.784,0.784,0.784,0.741,0.115,0.058,0.058,0.058,0.029,0.015,0.015,0.015,0.015,0.012,0.008,0.604,0.985,1.305,2.273,2.528,2.336,2.496,2.281,1.397,1.713,3.259,1.167,0.745,0.548,1.058,0.684,0.728,0.392,0.179,0.283,0.283,0.46,0.08,0.099,0.099,0.099,0.1,0.143,0.137,0.238,0.317,0.262,0.225,0.792,0.426,0.332,0.261,0.11,0.093,0.102,0.171,0.292,0.504,0.605,1.745,2.485,1.964,0.33,0.171,0.259,0.242,0.215,0.366,0.354,0.205,0.203,0.262,0.153,0.13,0.137,0.362,0.691,0.295,0.433,0.154,0.056,0.053,0.053,0.053,0.051,0.047,0.065,0.078,0.091,0.206,0.813,0.102,0.151,0.05,0.024,0.004,0.001,0,0,0,0.021,0.021,0.021,0.021,0.021,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.013,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.018,0.021,0.021,0.021,0.021,0.003,0,0,0,0,0,0,0,0,0,0.024,0.173,0.261,0.267,0.267,0.534,1.354,1.772,0.72,0.218,0.018,0.018,0.028,0.036,0.032,0.194,0.082,0.035,0.286,0.027,0.038,0.038,0.027,0.021,0.014,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.016,0.017,0.017,0.031,0.047,0.043,0.056,0.104,0.149,0.179,0.205,0.328,0.998,0.522,1.851,3.727,3.273,2.204,1.169,1.006,1.179,0.74,0.741,1.065,0.925,0.671,0.497,0.431,0.327,0.277,0.126,0.581,0.207,0.359,2.485,0.038,0.036,0.003,0.003,0.003,0.003,0.004,0.098,0.023,0.021,0.021,0.022,0.041,0.041,0.043,0.045,0.043,0.014,0.014,0.014,0.014,0.014,0.014,0.014,0.031,0.046,0.063,0.119,0.107,0.092,0.085,0.065,0.06,0.054,0.042,0.039,0.046,0.044,0.028,0.028,0.02,0.013,0.013,0.013,0.013,0.016,0.032,0.031,0.031,0.031,0.028,0.011,0.011,0.011,0.011,0.011,0.023,0.024,0.024,0.024,0.019,0.015,0.015,0.015,0.015,0.015,0.015,0.013,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.011,0.017,0.024,0.026,0.061,0.172,0.206,0.213,0.267,0.511,0.668,0.157,0.017,0.017,0.017,0.046,0.054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.001,0.017,0.017,0.017,0.017,0.016,0,0,0,0,0,0,0,0,0,0.01,0.017,0.017,0.017,0.017,0.012,0.017,0.017,0.017,0.017,0.012,0,0,0,0,0,0.003,0.031,0.066,0.093,0.112,0.122,0.202,0.068,0.041,0.022,0.011,0,0,0,0,0,0,0,0,0,0,0,0.002,0.005,0.012,0.021,0.021,0.019,0.033,0.03,0.026,0.026,0.034,0.095,0.024,0.024,0.024,0.023,0.019,0.018,0.018,0.018,0.011,0.03,0.045,0.044,0.044,0.044,0.022,0.009,0.024,0.033,0.033,0.033,0.024,0.009,0,0,0,0,0,0,0.003,0.017,0.017,0.017,0.017,0.014,0,0,0,0,0,0.032,0.032,0.032,0.032,0.032,0.005,0.008,0.009,0.014,0.014,0.009,0.005,0.004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.007,0.009,0.009,0.009,0.009,0.043,0.063,0.084,0.098,0.101,0.213,0.334,0.383,0.43,0.448,0.511,0.801,0.835,1.642,1.614,1.496,1.496,1.476,1.068,0.481,0.22,0.119,0.099,0.07,0.072,0.063,0.076,0.14,0.205,0.28,0.297,0.3,0.479,0.877,1.098,1.611,1.629,1.686,1.686,1.631,1.528,1.862,1.703,1.531,2.196,0.395,0.416,0.453,0.728,0.917,0.986,1.17,2.171,3.011,2.909,3.301,1.377,0.778,0.799,0.947,1.039,0.879,0.76,1.372,1.674,1.674,1.68,1.823,1.793,1.162,0.783,0.216,0.152,0.152,0.152,0.049,0,0,0,0.117,0.127,0.127,0.127,0.127,0.127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.003,0.005,0.005,0.005,0.005,0.003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.309,0.364,0.364,0.364,0.364,0.063,0.01,0.01,0.01,0.012,0.015,0.015,0.11,0.55,0.824,0.825,0.829,1.39,1.429,1.342,1.43,1.636,1.717,2.135,2.203,3.191,3.022,1.589,0.86,0.807,0.645,0.595,0.588,0.557,0.552,1.271,0.708,0.677,0.629,0.714,0.203,0.133,0.061,0.062,0.018,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.001,0.072,0.29,0.438,0.53,0.557,0.873,1.039,1.04,0.208,0.049,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.03,0.039,0.039,0.039,0.039,0.098,0.008,0.007,0.007,0.007,0.007,0.007,0.007,0.007,0.007,0.007,0.056,0.062,0.065,0.065,0.065,0.047,0.216,0.256,0.315,0.4,0.502,0.449,0.47,0.571,0.814,1.153,0.774,0.202,0.086,0.075,0.071,0.032,0.019,0.003,0.004,0.004,0.004,0.004,0.004,0.004,0.007,0.072,0.153,0.256,0.306,0.404,0.698,0.733,0.823,0.715,0.563,0.404,0.293,0.217,0.213,0.202,0.202,0.294,0.704,0.797,1.359,1.101,0.72,0.514,0.539,0.434,0.389,0.387,0.386,0.375,0.369,0.319,0.239,0.183,0.136,0.062,0.052,0.096,0.119,0.119,0.114,0.127,0.132,0.139,0.169,0.191,0.278,0.254,0.214,0.237,0.221,0.143,0.129,0.125,0.109,0.1,0.087,0.06,0.038,0.029,0.029,0.028,0.048,0.053,0.053,0.111,0.125,0.102,0.097,0.097,0.039,0.02,0.02,0.02,0.014,0.004,0.031,0.043,0.047,0.052,0.08,0.144,0.182,0.176,0.171,0.149,0.112,0.025,0,0,0,0,0,0,0,0.016,0.031,0.031,0.031,0.031,0.015,0,0,0,0,0,0.005,0.005,0.005,0.005,0.005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,0.005,0.005,0.005,0.005,0.001,0,0,0
+            ]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/heatmap-cartesian.ts b/public/examples/ts/heatmap-cartesian.ts
new file mode 100644
index 0000000..468cd3e
--- /dev/null
+++ b/public/examples/ts/heatmap-cartesian.ts
@@ -0,0 +1,66 @@
+/*
+title: Heatmap on Cartesian
+category: heatmap
+titleCN: 笛卡尔坐标系上的热力图
+difficulty: 0
+*/
+
+const hours = ['12a', '1a', '2a', '3a', '4a', '5a', '6a',
+        '7a', '8a', '9a','10a','11a',
+        '12p', '1p', '2p', '3p', '4p', '5p',
+        '6p', '7p', '8p', '9p', '10p', '11p'];
+const days = ['Saturday', 'Friday', 'Thursday',
+        'Wednesday', 'Tuesday', 'Monday', 'Sunday'];
+
+const data = [[0,0,5],[0,1,1],[0,2,0],[0,3,0],[0,4,0],[0,5,0],[0,6,0],[0,7,0],[0,8,0],[0,9,0],[0,10,0],[0,11,2],[0,12,4],[0,13,1],[0,14,1],[0,15,3],[0,16,4],[0,17,6],[0,18,4],[0,19,4],[0,20,3],[0,21,3],[0,22,2],[0,23,5],[1,0,7],[1,1,0],[1,2,0],[1,3,0],[1,4,0],[1,5,0],[1,6,0],[1,7,0],[1,8,0],[1,9,0],[1,10,5],[1,11,2],[1,12,2],[1,13,6],[1,14,9],[1,15,11],[1,16,6],[1,17,7],[1,18,8],[1,19,12],[1,20,5],[1,21,5],[1,22,7],[1,23,2],[2,0,1],[2,1,1],[2,2,0],[2,3,0],[2,4,0],[2,5,0],[2,6,0],[2,7,0],[2,8,0],[2,9,0],[2,10,3],[2,11,2],[2,12,1],[2,13,9],[2,14,8],[2,15,10],[2,16,6],[2,17,5],[2,18,5],[2,19,5],[2,20,7],[2,21,4],[2,22,2],[2,23,4],[3,0,7],[3,1,3],[3,2,0],[3,3,0],[3,4,0],[3,5,0],[3,6,0],[3,7,0],[3,8,1],[3,9,0],[3,10,5],[3,11,4],[3,12,7],[3,13,14],[3,14,13],[3,15,12],[3,16,9],[3,17,5],[3,18,5],[3,19,10],[3,20,6],[3,21,4],[3,22,4],[3,23,1],[4,0,1],[4,1,3],[4,2,0],[4,3,0],[4,4,0],[4,5,1],[4,6,0],[4,7,0],[4,8,0],[4,9,2],[4,10,4],[4,11,4],[4,12,2],[4,13,4],[4,14,4],[4,15,14],[4,16,12],[4,17,1],[4,18,8],[4,19,5],[4,20,3],[4,21,7],[4,22,3],[4,23,0],[5,0,2],[5,1,1],[5,2,0],[5,3,3],[5,4,0],[5,5,0],[5,6,0],[5,7,0],[5,8,2],[5,9,0],[5,10,4],[5,11,1],[5,12,5],[5,13,10],[5,14,5],[5,15,7],[5,16,11],[5,17,6],[5,18,0],[5,19,5],[5,20,3],[5,21,4],[5,22,2],[5,23,0],[6,0,1],[6,1,0],[6,2,0],[6,3,0],[6,4,0],[6,5,0],[6,6,0],[6,7,0],[6,8,0],[6,9,0],[6,10,1],[6,11,0],[6,12,2],[6,13,1],[6,14,3],[6,15,4],[6,16,0],[6,17,0],[6,18,0],[6,19,0],[6,20,1],[6,21,2],[6,22,2],[6,23,6]]
+    .map(function (item) {
+        return [item[1], item[0], item[2] || '-'];
+    });
+
+option = {
+    tooltip: {
+        position: 'top'
+    },
+    grid: {
+        height: '50%',
+        top: '10%'
+    },
+    xAxis: {
+        type: 'category',
+        data: hours,
+        splitArea: {
+            show: true
+        }
+    },
+    yAxis: {
+        type: 'category',
+        data: days,
+        splitArea: {
+            show: true
+        }
+    },
+    visualMap: {
+        min: 0,
+        max: 10,
+        calculable: true,
+        orient: 'horizontal',
+        left: 'center',
+        bottom: '15%'
+    },
+    series: [{
+        name: 'Punch Card',
+        type: 'heatmap',
+        data: data,
+        label: {
+            show: true
+        },
+        emphasis: {
+            itemStyle: {
+                shadowBlur: 10,
+                shadowColor: 'rgba(0, 0, 0, 0.5)'
+            }
+        }
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/line-aqi.ts b/public/examples/ts/line-aqi.ts
new file mode 100644
index 0000000..56f9663
--- /dev/null
+++ b/public/examples/ts/line-aqi.ts
@@ -0,0 +1,101 @@
+/*
+title: Beijing AQI
+category: line
+titleCN: 北京 AQI 可视化
+difficulty: 4
+*/
+
+$.get(ROOT_PATH + '/data/asset/data/aqi-beijing.json', function (data) {
+    myChart.setOption(option = {
+        title: {
+            text: 'Beijing AQI',
+            left: '1%'
+        },
+        tooltip: {
+            trigger: 'axis'
+        },
+        grid: {
+            left: '5%',
+            right: '15%',
+            bottom: '10%'
+        },
+        xAxis: {
+            data: data.map(function (item: string[]) {
+                return item[0];
+            })
+        },
+        yAxis: {},
+        toolbox: {
+            right: 10,
+            feature: {
+                dataZoom: {
+                    yAxisIndex: 'none'
+                },
+                restore: {},
+                saveAsImage: {}
+            }
+        },
+        dataZoom: [{
+            startValue: '2014-06-01'
+        }, {
+            type: 'inside'
+        }],
+        visualMap: {
+            top: 50,
+            right: 10,
+            pieces: [{
+                gt: 0,
+                lte: 50,
+                color: '#93CE07'
+            }, {
+                gt: 50,
+                lte: 100,
+                color: '#FBDB0F'
+            }, {
+                gt: 100,
+                lte: 150,
+                color: '#FC7D02'
+            }, {
+                gt: 150,
+                lte: 200,
+                color: '#FD0100'
+            }, {
+                gt: 200,
+                lte: 300,
+                color: '#AA069F'
+            }, {
+                gt: 300,
+                color: '#AC3B2A'
+            }],
+            outOfRange: {
+                color: '#999'
+            }
+        },
+        series: {
+            name: 'Beijing AQI',
+            type: 'line',
+            data: data.map(function (item: number[]) {
+                return item[1];
+            }),
+            markLine: {
+                silent: true,
+                lineStyle: {
+                    color: '#333'
+                },
+                data: [{
+                    yAxis: 50
+                }, {
+                    yAxis: 100
+                }, {
+                    yAxis: 150
+                }, {
+                    yAxis: 200
+                }, {
+                    yAxis: 300
+                }]
+            }
+        }
+    });
+});
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/line-draggable.ts b/public/examples/ts/line-draggable.ts
new file mode 100644
index 0000000..335e73a
--- /dev/null
+++ b/public/examples/ts/line-draggable.ts
@@ -0,0 +1,142 @@
+/*
+title: Try Dragging these Points
+category: 'line, drag'
+titleCN: 可拖拽点
+difficulty: 10
+*/
+
+var symbolSize = 20;
+var data = [[40, -10], [-30, -5], [-76.5, 20], [-63.5, 40], [-22.1, 50]];
+
+option = {
+    title: {
+        text: 'Try Dragging these Points',
+        left: 'center'
+    },
+    tooltip: {
+        triggerOn: 'none',
+        formatter: function (params) {
+            return 'X: ' + params.data[0].toFixed(2) + '<br>Y: ' + params.data[1].toFixed(2);
+        }
+    },
+    grid: {
+        top: '8%',
+        bottom: '12%',
+    },
+    xAxis: {
+        min: -100,
+        max: 70,
+        type: 'value',
+        axisLine: {onZero: false}
+    },
+    yAxis: {
+        min: -30,
+        max: 60,
+        type: 'value',
+        axisLine: {onZero: false}
+    },
+    dataZoom: [
+        {
+            type: 'slider',
+            xAxisIndex: 0,
+            filterMode: 'none'
+        },
+        {
+            type: 'slider',
+            yAxisIndex: 0,
+            filterMode: 'none'
+        },
+        {
+            type: 'inside',
+            xAxisIndex: 0,
+            filterMode: 'none'
+        },
+        {
+            type: 'inside',
+            yAxisIndex: 0,
+            filterMode: 'none'
+        }
+    ],
+    series: [
+        {
+            id: 'a',
+            type: 'line',
+            smooth: true,
+            symbolSize: symbolSize,
+            data: data
+        }
+    ]
+};
+
+
+setTimeout(function () {
+    // Add shadow circles (which is not visible) to enable drag.
+    myChart.setOption({
+        graphic: data.map(function (item, dataIndex) {
+            return {
+                type: 'circle',
+                position: myChart.convertToPixel('grid', item),
+                shape: {
+                    cx: 0,
+                    cy: 0,
+                    r: symbolSize / 2
+                },
+                invisible: true,
+                draggable: true,
+                ondrag: function (dx: number, dy: number) {
+                    onPointDragging(dataIndex, [(this as any).x, (this as any).y]);
+                },
+                onmousemove: function () {
+                    showTooltip(dataIndex);
+                },
+                onmouseout: function () {
+                    hideTooltip(dataIndex);
+                },
+                z: 100
+            };
+        })
+    });
+}, 0);
+
+window.addEventListener('resize', updatePosition);
+
+myChart.on('dataZoom', updatePosition);
+
+function updatePosition() {
+    myChart.setOption({
+        graphic: data.map(function (item, dataIndex) {
+            return {
+                position: myChart.convertToPixel('grid', item)
+            };
+        })
+    });
+}
+
+function showTooltip(dataIndex: number) {
+    myChart.dispatchAction({
+        type: 'showTip',
+        seriesIndex: 0,
+        dataIndex: dataIndex
+    });
+}
+
+function hideTooltip(dataIndex: number) {
+    myChart.dispatchAction({
+        type: 'hideTip'
+    });
+}
+
+function onPointDragging(dataIndex: number, pos: number[]) {
+    data[dataIndex] = myChart.convertFromPixel('grid', pos);
+
+    // Update data
+    myChart.setOption({
+        series: [{
+            id: 'a',
+            data: data
+        }]
+    });
+}
+
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/line-easing.ts b/public/examples/ts/line-easing.ts
new file mode 100644
index 0000000..f0ceac5
--- /dev/null
+++ b/public/examples/ts/line-easing.ts
@@ -0,0 +1,235 @@
+/*
+title: Line Easing Visualizing
+category: line
+titleCN: 缓动函数可视化
+difficulty: 8
+*/
+
+const easingFuncs: Record<string, (k: number) => number> = {
+    linear: function (k) {
+        return k;
+    },
+    quadraticIn: function (k) {
+        return k * k;
+    },
+    quadraticOut: function (k) {
+        return k * (2 - k);
+    },
+    quadraticInOut: function (k) {
+        if ((k *= 2) < 1) { return 0.5 * k * k; }
+        return -0.5 * (--k * (k - 2) - 1);
+    },
+    cubicIn: function (k) {
+        return k * k * k;
+    },
+    cubicOut: function (k) {
+        return --k * k * k + 1;
+    },
+    cubicInOut: function (k) {
+        if ((k *= 2) < 1) { return 0.5 * k * k * k; }
+        return 0.5 * ((k -= 2) * k * k + 2);
+    },
+    quarticIn: function (k) {
+        return k * k * k * k;
+    },
+    quarticOut: function (k) {
+        return 1 - (--k * k * k * k);
+    },
+    quarticInOut: function (k) {
+        if ((k *= 2) < 1) { return 0.5 * k * k * k * k; }
+        return -0.5 * ((k -= 2) * k * k * k - 2);
+    },
+    quinticIn: function (k) {
+        return k * k * k * k * k;
+    },
+    quinticOut: function (k) {
+        return --k * k * k * k * k + 1;
+    },
+    quinticInOut: function (k) {
+        if ((k *= 2) < 1) { return 0.5 * k * k * k * k * k; }
+        return 0.5 * ((k -= 2) * k * k * k * k + 2);
+    },
+    sinusoidalIn: function (k) {
+        return 1 - Math.cos(k * Math.PI / 2);
+    },
+    sinusoidalOut: function (k) {
+        return Math.sin(k * Math.PI / 2);
+    },
+    sinusoidalInOut: function (k) {
+        return 0.5 * (1 - Math.cos(Math.PI * k));
+    },
+    exponentialIn: function (k) {
+        return k === 0 ? 0 : Math.pow(1024, k - 1);
+    },
+    exponentialOut: function (k) {
+        return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);
+    },
+    exponentialInOut: function (k) {
+        if (k === 0) {
+            return 0;
+        }
+        if (k === 1) {
+            return 1;
+        }
+        if ((k *= 2) < 1) {
+            return 0.5 * Math.pow(1024, k - 1);
+        }
+        return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);
+    },
+    circularIn: function (k) {
+        return 1 - Math.sqrt(1 - k * k);
+    },
+    circularOut: function (k) {
+        return Math.sqrt(1 - (--k * k));
+    },
+    circularInOut: function (k) {
+        if ((k *= 2) < 1) { return -0.5 * (Math.sqrt(1 - k * k) - 1); }
+        return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);
+    },
+    elasticIn: function (k) {
+        var s;
+        var a = 0.1;
+        var p = 0.4;
+        if (k === 0) { return 0; }
+        if (k === 1) { return 1; }
+        if (!a || a < 1) { a = 1; s = p / 4; }
+        else { s = p * Math.asin(1 / a) / (2 * Math.PI); }
+        return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
+    },
+    elasticOut: function (k) {
+        var s;
+        var a = 0.1;
+        var p = 0.4;
+        if (k === 0) { return 0; }
+        if (k === 1) { return 1; }
+        if (!a || a < 1) { a = 1; s = p / 4; }
+        else { s = p * Math.asin(1 / a) / (2 * Math.PI); }
+        return (a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1);
+    },
+    elasticInOut: function (k) {
+        var s;
+        var a = 0.1;
+        var p = 0.4;
+        if (k === 0) { return 0; }
+        if (k === 1) { return 1; }
+        if (!a || a < 1) { a = 1; s = p / 4; }
+        else { s = p * Math.asin(1 / a) / (2 * Math.PI); }
+        if ((k *= 2) < 1) {
+            return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
+        }
+        return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;
+
+    },
+
+    // 在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动
+    backIn: function (k) {
+        var s = 1.70158;
+        return k * k * ((s + 1) * k - s);
+    },
+    backOut: function (k) {
+        var s = 1.70158;
+        return --k * k * ((s + 1) * k + s) + 1;
+    },
+    backInOut: function (k) {
+        var s = 1.70158 * 1.525;
+        if ((k *= 2) < 1) { return 0.5 * (k * k * ((s + 1) * k - s)); }
+        return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
+    },
+
+    // 创建弹跳效果
+    bounceIn: function (k) {
+        return 1 - easingFuncs.bounceOut(1 - k);
+    },
+    bounceOut: function (k) {
+        if (k < (1 / 2.75)) { return 7.5625 * k * k; }
+        else if (k < (2 / 2.75)) { return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75; }
+        else if (k < (2.5 / 2.75)) { return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375; }
+        else { return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375; }
+    },
+    bounceInOut: function (k) {
+        if (k < 0.5) { return easingFuncs.bounceIn(k * 2) * 0.5; }
+        return easingFuncs.bounceOut(k * 2 - 1) * 0.5 + 0.5;
+    }
+};
+
+const N_POINT = 30;
+
+const grids: echarts.GridComponentOption[] = [];
+const xAxes: echarts.XAXisComponentOption[] = [];
+const yAxes: echarts.YAXisComponentOption[] = [];
+const series: echarts.SeriesOption[] = [];
+const titles: echarts.TitleComponentOption[] = [];
+let count = 0;
+Object.keys(easingFuncs).forEach(function (easingName) {
+    var easingFunc = easingFuncs[easingName];
+    var data = [];
+    for (var i = 0; i <= N_POINT; i++) {
+        var x = i / N_POINT;
+        var y = easingFunc(x);
+        data.push([x, y]);
+    }
+    grids.push({
+        show: true,
+        borderWidth: 0,
+        shadowColor: 'rgba(0, 0, 0, 0.3)',
+        shadowBlur: 2
+    });
+    xAxes.push({
+        type: 'value',
+        show: false,
+        min: 0,
+        max: 1,
+        gridIndex: count
+    });
+    yAxes.push({
+        type: 'value',
+        show: false,
+        min: -0.4,
+        max: 1.4,
+        gridIndex: count
+    });
+    series.push({
+        name: easingName,
+        type: 'line',
+        xAxisIndex: count,
+        yAxisIndex: count,
+        data: data,
+        showSymbol: false,
+        animationEasing: easingName as any,
+        animationDuration: 1000
+    });
+    titles.push({
+        textAlign: 'center',
+        text: easingName,
+        textStyle: {
+            fontSize: 12,
+            fontWeight: 'normal'
+        }
+    });
+    count++;
+});
+
+var rowNumber = Math.ceil(Math.sqrt(count));
+grids.forEach(function (grid, idx) {
+    grid.left = ((idx % rowNumber) / rowNumber * 100 + 0.5) + '%';
+    grid.top = (Math.floor(idx / rowNumber) / rowNumber * 100 + 0.5) + '%';
+    grid.width = (1 / rowNumber * 100 - 1) + '%';
+    grid.height = (1 / rowNumber * 100 - 1) + '%';
+
+    titles[idx].left = parseFloat(grid.left) + parseFloat(grid.width) / 2 + '%';
+    titles[idx].top = parseFloat(grid.top) + '%';
+});
+
+option = {
+    title: titles.concat([{
+        text: 'Different Easing Functions',
+        top: 'bottom',
+        left: 'center'
+    }]),
+    grid: grids,
+    xAxis: xAxes,
+    yAxis: yAxes,
+    series: series
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/line-function.ts b/public/examples/ts/line-function.ts
new file mode 100644
index 0000000..9607d99
--- /dev/null
+++ b/public/examples/ts/line-function.ts
@@ -0,0 +1,75 @@
+/*
+title: Function Plot
+category: line
+titleCN: 函数绘图
+difficulty: 5
+*/
+
+function func(x: number) {
+    x /= 10;
+    return Math.sin(x) * Math.cos(x * 2 + 1) * Math.sin(x * 3 + 2) * 50;
+}
+
+function generateData() {
+    let data = [];
+    for (let i = -200; i <= 200; i += 0.1) {
+        data.push([i, func(i)]);
+    }
+    return data;
+}
+
+option = {
+    animation: false,
+    grid: {
+        top: 40,
+        left: 50,
+        right: 40,
+        bottom: 50
+    },
+    xAxis: {
+        name: 'x',
+        minorTick: {
+            show: true
+        },
+        minorSplitLine: {
+            show: true
+        }
+    },
+    yAxis: {
+        name: 'y',
+        min: -100,
+        max: 100,
+        minorTick: {
+            show: true
+        },
+        minorSplitLine: {
+            show: true
+        }
+    },
+    dataZoom: [{
+        show: true,
+        type: 'inside',
+        filterMode: 'none',
+        xAxisIndex: [0],
+        startValue: -20,
+        endValue: 20
+    }, {
+        show: true,
+        type: 'inside',
+        filterMode: 'none',
+        yAxisIndex: [0],
+        startValue: -20,
+        endValue: 20
+    }],
+    series: [
+        {
+            type: 'line',
+            showSymbol: false,
+            clip: true,
+            data: generateData()
+        }
+    ]
+};
+
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/line-gradient.ts b/public/examples/ts/line-gradient.ts
new file mode 100644
index 0000000..9512be0
--- /dev/null
+++ b/public/examples/ts/line-gradient.ts
@@ -0,0 +1,76 @@
+/*
+title: Line Gradient
+category: line
+titleCN: 折线图的渐变
+difficulty: 3
+*/
+
+
+const data = [["2000-06-05",116],["2000-06-06",129],["2000-06-07",135],["2000-06-08",86],["2000-06-09",73],["2000-06-10",85],["2000-06-11",73],["2000-06-12",68],["2000-06-13",92],["2000-06-14",130],["2000-06-15",245],["2000-06-16",139],["2000-06-17",115],["2000-06-18",111],["2000-06-19",309],["2000-06-20",206],["2000-06-21",137],["2000-06-22",128],["2000-06-23",85],["2000-06-24",94],["2000-06-25",71],["2000-06-26",106],["2000-06-27",84],["2000-06-28",93],["2000-06-29",85],["2000-06-30",73],["2000-07-01",83],["2000-07-02",125],["2000-07-03",107],["2000-07-04",82],["2000-07-05",44],["2000-07-06",72],["2000-07-07",106],["2000-07-08",107],["2000-07-09",66],["2000-07-10",91],["2000-07-11",92],["2000-07-12",113],["2000-07-13",107],["2000-07-14",131],["2000-07-15",111],["2000-07-16",64],["2000-07-17",69],["2000-07-18",88],["2000-07-19",77],["2000-07-20",83],["2000-07-21",111],["2000-07-22",57],["2000-07-23",55],["2000-07-24",60]];
+
+const dateList = data.map(function (item) {
+    return item[0];
+});
+const valueList = data.map(function (item) {
+    return item[1];
+});
+
+option = {
+
+    // Make gradient line here
+    visualMap: [{
+        show: false,
+        type: 'continuous',
+        seriesIndex: 0,
+        min: 0,
+        max: 400
+    }, {
+        show: false,
+        type: 'continuous',
+        seriesIndex: 1,
+        dimension: 0,
+        min: 0,
+        max: dateList.length - 1
+    }],
+
+
+    title: [{
+        left: 'center',
+        text: 'Gradient along the y axis'
+    }, {
+        top: '55%',
+        left: 'center',
+        text: 'Gradient along the x axis'
+    }],
+    tooltip: {
+        trigger: 'axis'
+    },
+    xAxis: [{
+        data: dateList
+    }, {
+        data: dateList,
+        gridIndex: 1
+    }],
+    yAxis: [{
+    }, {
+        gridIndex: 1
+    }],
+    grid: [{
+        bottom: '60%'
+    }, {
+        top: '60%'
+    }],
+    series: [{
+        type: 'line',
+        showSymbol: false,
+        data: valueList
+    }, {
+        type: 'line',
+        showSymbol: false,
+        data: valueList,
+        xAxisIndex: 1,
+        yAxisIndex: 1
+    }]
+};
+
+export []
\ No newline at end of file
diff --git a/public/examples/ts/line-graphic.ts b/public/examples/ts/line-graphic.ts
new file mode 100644
index 0000000..aa3a426
--- /dev/null
+++ b/public/examples/ts/line-graphic.ts
@@ -0,0 +1,122 @@
+/*
+title: Custom Graphic Component
+titleCN: 自定义图形组件
+category: line
+difficulty: 9
+*/
+
+option = {
+    legend: {
+        data:['Altitude (km) vs Temperature (°C)']
+    },
+    tooltip: {
+        trigger: 'axis',
+        formatter: "Temperature : <br/>{b}km : {c}°C"
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+    },
+    xAxis: {
+        type: 'value',
+        axisLabel: {
+            formatter: '{value} °C'
+        }
+    },
+    yAxis: {
+        type: 'category',
+        axisLine: {onZero: false},
+        axisLabel: {
+            formatter: '{value} km'
+        },
+        boundaryGap: true,
+        data: ['0', '10', '20', '30', '40', '50', '60', '70', '80']
+    },
+    graphic: [
+        {
+            type: 'group',
+            rotation: Math.PI / 4,
+            bounding: 'raw',
+            right: 110,
+            bottom: 110,
+            z: 100,
+            children: [
+                {
+                    type: 'rect',
+                    left: 'center',
+                    top: 'center',
+                    z: 100,
+                    shape: {
+                        width: 400,
+                        height: 50
+                    },
+                    style: {
+                        fill: 'rgba(0,0,0,0.3)'
+                    }
+                },
+                {
+                    type: 'text',
+                    left: 'center',
+                    top: 'center',
+                    z: 100,
+                    style: {
+                        fill: '#fff',
+                        text: 'ECHARTS LINE CHART',
+                        font: 'bold 26px sans-serif'
+                    }
+                }
+            ]
+        },
+        {
+            type: 'group',
+            left: '10%',
+            top: 'center',
+            children: [
+                {
+                    type: 'rect',
+                    z: 100,
+                    left: 'center',
+                    top: 'middle',
+                    shape: {
+                        width: 240,
+                        height: 90
+                    },
+                    style: {
+                        fill: '#fff',
+                        stroke: '#555',
+                        lineWidth: 1,
+                        shadowBlur: 8,
+                        shadowOffsetX: 3,
+                        shadowOffsetY: 3,
+                        shadowColor: 'rgba(0,0,0,0.2)'
+                    }
+                },
+                {
+                    type: 'text',
+                    z: 100,
+                    left: 'center',
+                    top: 'middle',
+                    style: {
+                        fill: '#333',
+                        width: 220,
+                        overflow: 'break',
+                        text: 'xAxis represents temperature in °C, yAxis represents altitude in km, An image watermark in the upper right, This text block can be placed in any place',
+                        font: '14px Microsoft YaHei'
+                    }
+                }
+            ]
+        }
+    ],
+    series: [
+        {
+            name: '高度(km)与气温(°C)变化关系',
+            type: 'line',
+            smooth: true,
+            data:[15, -50, -56.5, -46.5, -22.1, -2.5, -27.7, -55.7, -76.5]
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/line-in-cartesian-coordinate-system.ts b/public/examples/ts/line-in-cartesian-coordinate-system.ts
new file mode 100644
index 0000000..de2e7b8
--- /dev/null
+++ b/public/examples/ts/line-in-cartesian-coordinate-system.ts
@@ -0,0 +1,17 @@
+/*
+title: Line Chart in Cartesian Coordinate System
+category: line
+titleCN: 双数值轴折线图
+difficulty: 7
+*/
+
+option = {
+    xAxis: {},
+    yAxis: {},
+    series: [{
+        data: [[10, 40], [50, 100], [40, 20]],
+        type: 'line'
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/line-log.ts b/public/examples/ts/line-log.ts
new file mode 100644
index 0000000..9e02184
--- /dev/null
+++ b/public/examples/ts/line-log.ts
@@ -0,0 +1,59 @@
+/*
+title: Log Axis
+category: line
+titleCN: 对数轴示例
+difficulty: 7
+*/
+
+option = {
+    title: {
+        text: 'Log Axis',
+        left: 'center'
+    },
+    tooltip: {
+        trigger: 'item',
+        formatter: '{a} <br/>{b} : {c}'
+    },
+    legend: {
+        left: 'left'
+    },
+    xAxis: {
+        type: 'category',
+        name: 'x',
+        splitLine: {show: false},
+        data: ['一', '二', '三', '四', '五', '六', '七', '八', '九']
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+    },
+    yAxis: {
+        type: 'log',
+        name: 'y',
+        minorSplitLine: {
+            show: true
+        }
+    },
+    series: [
+        {
+            name: 'Log2',
+            type: 'line',
+            data: [1, 3, 9, 27, 81, 247, 741, 2223, 6669]
+        },
+        {
+            name: 'Log3',
+            type: 'line',
+            data: [1, 2, 4, 8, 16, 32, 64, 128, 256]
+        },
+        {
+            name: 'Log1/2',
+            type: 'line',
+            data: [1/2, 1/4, 1/8, 1/16, 1/32, 1/64, 1/128, 1/256, 1/512]
+        }
+    ]
+};
+
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/line-marker.ts b/public/examples/ts/line-marker.ts
new file mode 100644
index 0000000..1a3ebe8
--- /dev/null
+++ b/public/examples/ts/line-marker.ts
@@ -0,0 +1,89 @@
+/*
+title: Temperature Change in the Coming Week
+category: line
+titleCN: 未来一周气温变化
+difficulty: 2
+*/
+
+option = {
+    title: {
+        text: 'Temperature Change in the Coming Week',
+        subtext: '纯属虚构'
+    },
+    tooltip: {
+        trigger: 'axis'
+    },
+    legend: {
+    },
+    toolbox: {
+        show: true,
+        feature: {
+            dataZoom: {
+                yAxisIndex: 'none'
+            },
+            dataView: {readOnly: false},
+            magicType: {type: ['line', 'bar']},
+            restore: {},
+            saveAsImage: {}
+        }
+    },
+    xAxis: {
+        type: 'category',
+        boundaryGap: false,
+        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+    },
+    yAxis: {
+        type: 'value',
+        axisLabel: {
+            formatter: '{value} °C'
+        }
+    },
+    series: [
+        {
+            name: 'Highest',
+            type: 'line',
+            data: [10, 11, 13, 11, 12, 12, 9],
+            markPoint: {
+                data: [
+                    {type: 'max', name: 'Max'},
+                    {type: 'min', name: 'Min'}
+                ]
+            },
+            markLine: {
+                data: [
+                    {type: 'average', name: 'Avg'}
+                ]
+            }
+        },
+        {
+            name: 'Lowest',
+            type: 'line',
+            data: [1, -2, 2, 5, 3, 2, 0],
+            markPoint: {
+                data: [
+                    {name: '周最低', value: -2, xAxis: 1, yAxis: -1.5}
+                ]
+            },
+            markLine: {
+                data: [
+                    {type: 'average', name: 'Avg'},
+                    [{
+                        symbol: 'none',
+                        x: '90%',
+                        yAxis: 'max'
+                    }, {
+                        symbol: 'circle',
+                        label: {
+                            position: 'start',
+                            formatter: 'Max'
+                        },
+                        type: 'max',
+                        name: '最高点'
+                    }]
+                ]
+            }
+        }
+    ]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/line-markline.ts b/public/examples/ts/line-markline.ts
new file mode 100644
index 0000000..9b1341c
--- /dev/null
+++ b/public/examples/ts/line-markline.ts
@@ -0,0 +1,81 @@
+/*
+title: Line with Marklines
+titleCN: 折线图的标记线
+category: line
+difficulty: 6
+*/
+
+const markLine: echarts.MarkLineComponentOption['data'] = [];
+const positions = [
+    'start', 'middle', 'end',
+    'insideStart', 'insideStartTop', 'insideStartBottom',
+    'insideMiddle', 'insideMiddleTop', 'insideMiddleBottom',
+    'insideEnd', 'insideEndTop', 'insideEndBottom'
+] as const;
+for (var i = 0; i < positions.length; ++i) {
+    markLine.push({
+        name: positions[i],
+        yAxis: 1.8 - 0.2 * Math.floor(i / 3),
+        label: {
+            formatter: '{b}',
+            position: positions[i]
+        }
+    });
+
+    if (positions[i] !== 'middle') {
+        const name = positions[i] === 'insideMiddle'
+            ? 'insideMiddle / middle'
+            : positions[i];
+
+        markLine.push([{
+            name: 'start: ' + positions[i],
+            coord: [0, 0.3],
+            label: {
+                formatter: name,
+                position: positions[i]
+            }
+        }, {
+            name: 'end: ' + positions[i],
+            coord: [3, 1]
+        }]);
+    }
+}
+
+option = {
+    animation: false,
+    textStyle: {
+        fontSize: 14
+    },
+    xAxis: {
+        data: ['A', 'B', 'C', 'D', 'E'],
+        boundaryGap: true,
+        splitArea: {
+            show: true
+        }
+    },
+    yAxis: {
+        max: 2
+    },
+    series: [{
+        name: 'line',
+        type: 'line',
+        stack: 'all',
+        symbolSize: 6,
+        data: [0.3, 1.4, 1.2, 1, 0.6],
+        markLine: {
+            data: markLine,
+            label: {
+                distance: [20, 8]
+            }
+        }
+    }],
+    grid: {
+        top: 30,
+        left: 60,
+        right: 60,
+        bottom: 40
+    }
+};
+
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/line-pen.ts b/public/examples/ts/line-pen.ts
new file mode 100644
index 0000000..52f808d
--- /dev/null
+++ b/public/examples/ts/line-pen.ts
@@ -0,0 +1,75 @@
+/*
+title: Click to Add Points
+category: line
+titleCN: 点击添加折线图拐点
+difficulty: 9
+*/
+
+const symbolSize = 20;
+const data = [[15, 0], [-50, 10], [-56.5, 20], [-46.5, 30], [-22.1, 40]];
+
+option = {
+    title: {
+        text: 'Click to Add Points'
+    },
+    tooltip: {
+        formatter: function (params) {
+            var data = params.data || [0, 0];
+            return data[0].toFixed(2) + ', ' + data[1].toFixed(2);
+        }
+    },
+    grid: {
+        left: '3%',
+        right: '4%',
+        bottom: '3%',
+        containLabel: true
+    },
+    xAxis: {
+        min: -60,
+        max: 20,
+        type: 'value',
+        axisLine: {onZero: false}
+    },
+    yAxis: {
+        min: 0,
+        max: 40,
+        type: 'value',
+        axisLine: {onZero: false}
+    },
+    series: [
+        {
+            id: 'a',
+            type: 'line',
+            smooth: true,
+            symbolSize: symbolSize,
+            data: data
+        }
+    ]
+};
+
+var zr = myChart.getZr();
+
+
+zr.on('click', function (params) {
+    var pointInPixel = [params.offsetX, params.offsetY];
+    var pointInGrid = myChart.convertFromPixel('grid', pointInPixel);
+
+    if (myChart.containPixel('grid', pointInPixel)) {
+        data.push(pointInGrid);
+
+        myChart.setOption({
+            series: [{
+                id: 'a',
+                data: data
+            }]
+        });
+    }
+});
+
+zr.on('mousemove', function (params) {
+    var pointInPixel = [params.offsetX, params.offsetY];
+    zr.setCursorStyle(myChart.containPixel('grid', pointInPixel) ? 'copy' : 'default');
+});
+
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/line-polar.ts b/public/examples/ts/line-polar.ts
new file mode 100644
index 0000000..a8f1eb7
--- /dev/null
+++ b/public/examples/ts/line-polar.ts
@@ -0,0 +1,44 @@
+/*
+title: Two Value-Axes in Polar
+category: line
+titleCN: 极坐标双数值轴
+difficulty: 10
+*/
+
+const data: number[][] = [];
+
+for (let i = 0; i <= 100; i++) {
+    let theta = i / 100 * 360;
+    let r = 5 * (1 + Math.sin(theta / 180 * Math.PI));
+    data.push([r, theta]);
+}
+
+option = {
+    title: {
+        text: 'Two Value-Axes in Polar'
+    },
+    legend: {
+        data: ['line']
+    },
+    polar: {},
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'cross'
+        }
+    },
+    angleAxis: {
+        type: 'value',
+        startAngle: 0
+    },
+    radiusAxis: {
+    },
+    series: [{
+        coordinateSystem: 'polar',
+        name: 'line',
+        type: 'line',
+        data: data
+    }]
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/line-polar2.ts b/public/examples/ts/line-polar2.ts
new file mode 100644
index 0000000..9725edc
--- /dev/null
+++ b/public/examples/ts/line-polar2.ts
@@ -0,0 +1,49 @@
+/*
+title: Two Value-Axes in Polar
+category: line
+titleCN: 极坐标双数值轴
+difficulty: 10
+*/
+
+const data: number[][] = [];
+
+for (let i = 0; i <= 360; i++) {
+    let t = i / 180 * Math.PI;
+    let r = Math.sin(2 * t) * Math.cos(2 * t);
+    data.push([r, i]);
+}
+
+option = {
+    title: {
+        text: 'Two Value-Axes in Polar'
+    },
+    legend: {
+        data: ['line']
+    },
+    polar: {
+        center: ['50%', '54%']
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'cross'
+        }
+    },
+    angleAxis: {
+        type: 'value',
+        startAngle: 0
+    },
+    radiusAxis: {
+        min: 0
+    },
+    series: [{
+        coordinateSystem: 'polar',
+        name: 'line',
+        type: 'line',
+        showSymbol: false,
+        data: data
+    }],
+    animationDuration: 2000
+};
+
+export {}
\ No newline at end of file
diff --git a/public/examples/ts/line-race.ts b/public/examples/ts/line-race.ts
new file mode 100644
index 0000000..330ed98
--- /dev/null
+++ b/public/examples/ts/line-race.ts
@@ -0,0 +1,90 @@
+/*
+title: Line Race
+category: line
+titleCN: 动态排序折线图
+difficulty: 5
+videoStart: 3000
+videoEnd: 8000
+*/
+
+$.get(ROOT_PATH + '/data/asset/data/life-expectancy-table.json', function (_rawData) {
+    run(_rawData);
+});
+
+function run(_rawData: any) {
+
+    // var countries = ['Australia', 'Canada', 'China', 'Cuba', 'Finland', 'France', 'Germany', 'Iceland', 'India', 'Japan', 'North Korea', 'South Korea', 'New Zealand', 'Norway', 'Poland', 'Russia', 'Turkey', 'United Kingdom', 'United States'];
+    const countries = ['Finland', 'France', 'Germany', 'Iceland', 'Norway', 'Poland', 'Russia', 'United Kingdom'];
+    const datasetWithFilters: echarts.DatasetComponentOption[] = [];
+    const seriesList: echarts.SeriesOption[] = [];
+    echarts.util.each(countries, function (country) {
+        var datasetId = 'dataset_' + country;
+        datasetWithFilters.push({
+            id: datasetId,
+            fromDatasetId: 'dataset_raw',
+            transform: {
+                type: 'filter',
+                config: {
+                    and: [
+                        { dimension: 'Year', gte: 1950 },
+                        { dimension: 'Country', '=': country }
+                    ]
+                }
+            }
+        });
+        seriesList.push({
+            type: 'line',
+            datasetId: datasetId,
+            showSymbol: false,
+            name: country,
+            endLabel: {
+                show: true,
+                formatter: function (params) {
+                    return params.value[3] + ': ' + params.value[0];
+                }
+            },
+            labelLayout: {
+                moveOverlap: 'shiftY'
+            },
+            emphasis: {
+                focus: 'series'
+            },
+            encode: {
+                x: 'Year',
+                y: 'Income',
+                label: ['Country', 'Income'],
+                itemName: 'Year',
+                tooltip: ['Income'],
+            }
+        });
+    });
+
+    option = {
+        animationDuration: 10000,
+        dataset: [{
+            id: 'dataset_raw',
+            source: _rawData
+        }, ...datasetWithFilters],
+        title: {
+            text: 'Income of Germany and France since 1950'
+        },
+        tooltip: {
+            order: 'valueDesc',
+            trigger: 'axis'
+        },
+        xAxis: {
+            type: 'category',
+            nameLocation: 'middle'
+        },
+        yAxis: {
+            name: 'Income'
+        },
+        grid: {
+            right: 140
+        },
+        series: seriesList
+    };
+
+    myChart.setOption(option);
+
+}