ECharts动态数据+时间轴+dataZoom

<!DOCTYPE html>
<html lang="en"  style="height: 100%">
<head>
    <meta charset="UTF-8">
    <title>Map</title>
    <style>
        body{
            position: relative;
            font-family: "Microsoft YaHei UI";
            /*background-color: #000000;*/
        }
        *{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        ul,li{
            list-style: none;
        }
        .clear:after{
            display: block;
            content: "";
            clear:both;
        }
        #chart{
            width: 99%;
            height: 80%;
        }
        #timeSpan{
            margin-top: 2%;
        }
        #timeSpan>li{
            float: left;
            width: 100px;
            height: 20px;
            border-radius: 5px;
            background-color: #95BB2F;
            text-align: center;
            cursor: pointer;
            margin-left: 50px;
        }
    </style>
    <script type="text/javascript" src="http://echarts.baidu.com/gallery/vendors/echarts/echarts.min.js"></script>
    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body style="height: 100%; margin: 0;min-width: 1200px;min-height: 770px">
<ul id="timeSpan" class="clear">
    <li>5min</li>
    <li>10min</li>
    <li>15min</li>
    <li>30min</li>
</ul>
<div id="chart"></div>


<script>
    $(function () {
        // var data123 = [
        //     { value: [ '2016/2/18 03:00:00', 363 ] },
        //     { value: [ '2016/2/18 04:00:00', 384 ] },
        //     { value: [ '2016/2/18 05:00:00', 371 ] },
        // ];
        var data_in = [
            918.32,
            902.51,
            900.41,
            873.43,
            885.39,
            897.63,
            892.44,
            879.04,
            850.83,
            848.52,
            844.87,
            834.54,
            832.48,
            815.48,
            811.23,
            821.20,
            805.10,
            794.49,
            801.23,
            788.80,
            769.70,
            789.80,
            763.46,
            758.57,
            773.49,
            764.45,
            739.66,
            757.55,
            731.12,
            724.06,
            732.70,
            723.80,
            714.91,
            723.46,
            705.10,
            708.90,
            723.75,
            703.06,
            684.51,
            692.63,
            683.14,
            671.95,
            691.97,
            684.04,
            667.59,
            688.56,
            659.01,
            652.39,
            670.98,
            638.10,
            655.85,
            627.21,
            648.82,
            631.68,
            614.94,
            642.69,
            626.22,
            613.44,
            641.15,
            613.90,
            601.39,
            623.22,
            602.94,
            589.90,
            612.01,
            590.85,
            591.51,
            585.67,
            559.47,
            557.43,
            518.20,
            504.63,
            506.67,
            512.66,
            440.93,
            614.94,
            642.69,
            626.22,
            613.44,
            641.15,
            613.90,
            601.39,
            623.22,
            602.94,
            598.28,
            593.18,
            625.85,
            625.43,
            611.52,
            660.33,
            669.41,
            707.86,
            729.56,
            728.72,
            770.35,
            800.78,
            791.52,
            797.62,
            808.94,
            625.43,
            611.52,
            660.33,
            669.41,
            707.86,
            729.56,
            728.72,
            770.35,
            800.78,
            676.64,
            598.28,
            593.18,
            625.85,
            625.43,
            611.52,
            660.33,
            669.41,
            707.86,
            729.56,
            728.72,
            770.35,
            800.78,
            791.52,
            797.62,
            808.94,
            817.76,
            797.77,
            806.65,
            763.81,
            771.01,
            796.27,
            777.58,
            776.37,
            821.18,
            814.54,
            832.37,
            853.91,
            870.55,
            861.75,
            888.66,
            888.60,
            910.95,
            934.58,
            920.79,
            923.61,
            921.88,
            1096.03,
            1041.94,
            951.67,
            932.29,
            935.73,
            941.29,
            944.34,
            965.24,
            928.95,
            943.34,
            968.91,
            977.17,
            941.77,
            964.47,
            964.86,
            926.30,
            929.23,
            934.07,
            974.39,
            977.48,
            953.90,
            929.79,
            948.32,
            943.09,
            933.89,
            948.30,
            934.66,
            936.59,
            958.61,
            930.23,
            927.04,
            966.15,
            923.08,
            887.60,
            924.59,
            909.70,
            889.48,
            892.51,
            906.88,
            907.99,
            927.54,
            902.11,
            902.41,
            940.20,
            937.34,
            952.79,
            952.53,
            944.37,
            952.09,
            924.20,
            924.65,
            939.26,
            967.97,
            988.18,
            1017.07,
            1007.07,
            1014.48,
            1016.72,
            1007.58,
            974.98,
            1053.01,
            1044.22,
            1038.93,
            1029.50,
            1093.14,
            1124.30,
            1120.13,
            1123.74,
            1105.22,
            1132.26,
            1124.54,
            1137.46,
            1177.16,
            1114.36,
            1087.06,
            1096.11,
            1083.61,
            1096.21,
            1069.42,
            1090.59,
            1081.66,
            1095.27,
            1105.93,
            1098.18,
            1102.24,
            1115.35,
            1127.81,
            1139.65,
            1159.92,
            1180.29,
            1157.27,
            1201.08,
            1186.57,
            1200.80,
            1244.75,
            1216.21,
            1199.90,
            1224.75,
            1188.85,
            1180.26,
            1151.10,
            1173.41,
            1156.91,
            1160.99,
            1160.67,
            1158.08,
            1129.06,
            1100.04,
            1068.78,
            1102.13,
            1079.86,
            1029.01,
            1032.81,
            995.74,
            979.22,
            924.57,
            901.16,
            868.52,
            964.42,
            902.96,
            899.91,
            902.52,
            926.63,
            899.92,
            911.75,
            879.48,
            857.78,
            862.70,
            868.01,
            868.61,
            867.72,
            831.92,
            841.49,
            828.46,
            918.32,
            902.51,
            900.41,
            873.43,
            885.39,
            897.63,
            892.44,
            879.04,
            850.83,
            848.52,
            918.32,
            902.51,
            900.41,
            873.43,
            885.39,
            897.63,
            892.44,
            879.04,
            850.83,
            848.52,
            844.87,
            834.54,
            832.48,
            815.48,
            811.23,
            821.20,
            805.10,
            794.49,
            801.23,
            788.80,
            769.70,
            789.80,
            763.46,
            758.57,
            773.49,
            764.45,
            739.66,
            757.55,
            731.12,
            724.06,
            732.70,
            723.80,
            714.91,
            723.46,
            705.10,
            708.90,
            723.75,
            703.06,
            684.51,
            692.63,
            683.14,
        ];
        var oneDay = 24 * 3600 *1000;
        var fiveMinutes = 300 * 1000;
        var timestr = '2016/2/18 00:00:00';
        var startTime = +new Date(timestr)-fiveMinutes;

        //把new Date出来的时间格式转换为data123中的日期格式
        function riqigeshi(now){
            return now.toLocaleDateString() + ' ' + now.getHours() + now.toLocaleTimeString().substr(-6,6)
        }

        //用来返回data123一样的数据格式
        function chartData(i,data,now) {
            return {
                value: [
                    riqigeshi(now),
                    data[i]/1024,
                ]
            }
        }

        //把原数据改成data123一样的格式
        function changeData(datain) {
            var liuru = [];
            for (var i = 0; i < 289; i++) {
                startTime = new Date(+startTime + fiveMinutes);
                liuru.push(chartData(i,datain,startTime));
            }
            return liuru;
        }
        var liuru = changeData(data_in);

        var chart = echarts.init(document.getElementById("chart"));
        var option = {
            grid:{
                x:'3.6%',
                y:'5%',
                x2:'2.4%',
                y2:'12%',
            },
            xAxis:{
                type:'time',
                splitNumber:24
            },
            yAxis:{
                type:'value',
                axisLabel:{
                    formatter:'{value} G'       //给Y轴上的刻度加上单位
                },
            },
            dataZoom: [
                {
                    type: 'slider',//数据滑块
                    start:0,
                    minSpan:8,    //5min
                    // minSpan:16,   //10min
                    // minSpan:24,   //15min
                    // minSpan:50,   //30min
                    dataBackground:{
                        lineStyle:{
                            color:'#95BC2F'
                        },
                        areaStyle:{
                            color:'#95BC2F',
                            opacity:1,
                        }
                    },
                    // fillerColor:'rgba(255,255,255,.6)'
                },
                {
                    type:'inside'//使鼠标在图表中时滚轮可用
                }
            ],
            tooltip:{
                trigger: 'axis',
                formatter : function(params) {
                    var result = params[0].value[0];
                    params.forEach(function(item) {
                        result += '<br/>';
                        result += '<span style="display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:' + item.color + '"></span>';
                        result += item.seriesName + ":";
                        result += isNaN(item.value[1]) ? 0 : (item.value[1]*1024).toFixed(2) + "M";
                    });
                    return result;
                },
            },
            series:{
                name: '流入',
                type: 'line',
                showSymbol: false,
                symbolSize:12,
                data: liuru,
            }
        };

        chart.setOption(option);

        $("#timeSpan").on('click','li',function () {
            var timeSpan = $(this).html();
            switch(timeSpan){
                case '5min':
                    chart.setOption({
                        dataZoom:[
                            {
                                start:92,
                                end:100
                            }
                        ],
                    });
                    break;
                case '10min':
                    chart.setOption({
                        dataZoom:[
                            {
                                start:84,
                                end:100
                            }
                        ],
                    });
                    break;
                case '15min':
                    chart.setOption({
                        dataZoom:[
                            {
                                start:76,
                                end:100
                            }
                        ],
                    });
                    break;
                case '30min':
                    chart.setOption({
                        dataZoom:[
                            {
                                start:50,
                                end:100
                            }
                        ],
                    });
                    break;
            }
        });

        function refresh() {
            // liuru先shift(),再push()
            var liuruShift = liuru.shift();
            var liuruShiftVal = liuruShift.value[1];
            var newlrtime = riqigeshi(new Date(+new Date(liuruShift.value[0])+oneDay+fiveMinutes));
            liuru.push({value:[newlrtime,liuruShiftVal]});
            chart.setOption({
                series:{
                    data:liuru,
                }
            });
        }

        setInterval(function () {
            refresh();
        },3000);

        window.onresize = function () {
            chart.resize();
        };
    }());

</script>
</body>
</html>

<think>嗯,用户问的是ECharts+Gantt+Demo,我需要先理解这三个部分分别是什么,以及它们如何结合起来。首先,ECharts是百度开源的一个可视化库,主要用于数据图表展示,比如折线图、柱状图等。Gantt图是甘特图,通常用于项目管理,展示任务的时间安排和进度。用户可能想知道如何在ECharts中实现甘特图,并希望有一个演示示例。 接下来,我需要确认ECharts是否原生支持甘特图。根据记忆,ECharts本身没有专门的甘特图类型,但可以通过其他图表类型如条形图进行定制。可能需要使用到坐标系配置、数据格式转换等。这时候,我需要回忆或查找ECharts的官方文档,看看有没有相关的示例或者配置方法。 然后,用户提到“Demo”,说明用户可能需要一个具体的代码示例来展示如何实现。因此,我应该准备一个简单的示例代码,说明如何配置ECharts来生成甘特图,并解释各个部分的作用。此外,还需要考虑数据的结构,甘特图通常需要任务名称、开始时间、持续时间或结束时间,这些数据如何映射到ECharts的选项中。 同时,需要注意ECharts时间轴处理,可能需要将日期转换为时间戳,或者使用类目轴配合数据。另外,甘特图的条形可能需要水平显示,因此要配置yAxis为类目轴,xAxis为时间轴。还需要考虑进度条的颜色、标签显示、提示信息等细节。 可能遇到的问题包括数据格式的处理、坐标轴的调整、以及交互功能的添加,比如拖拽调整任务时间。不过,作为基础Demo,可能先实现静态的甘特图,再提及进阶的可能性。 最后,需要验证提供的示例代码是否正确,确保没有语法错误,并且能够在ECharts环境中正常运行。同时,提醒用户如果需要更复杂的功能,可能需要结合其他库或自行扩展配置。</think>我将分步骤为您介绍如何基于 ECharts 实现甘特图(Gantt)效果,并提供一个可运行的 Demo: --- ### 一、基本概念 1. **ECharts** 百度开源的 JavaScript 数据可视化库,支持多种图表类型,但原生**不直接提供甘特图类型**。 2. **Gantt 图** 通过**水平条形图**展示任务时间轴,需通过 ECharts 的**自定义配置**实现。 --- ### 二、实现原理 通过以下 ECharts 组件组合实现: - `yAxis`: 类目轴显示任务名称 - `xAxis`: 时间轴显示日期范围 - `series.type: 'bar'`: 横向条形表示任务时间跨度 - `data` 特殊格式处理 --- ### 三、完整 Demo 代码 ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ECharts 甘特图示例</title> <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.2/dist/echarts.min.js"></script> </head> <body> <div id="ganttChart" style="width: 800px;height:400px;"></div> <script> // 数据格式:[任务名称, 开始时间, 结束时间] const tasks = [ ['需求分析', '2024-01-01', '2024-01-07'], ['UI设计', '2024-01-08', '2024-01-15'], ['开发', '2024-01-16', '2024-02-05'], ['测试', '2024-02-06', '2024-02-20'] ]; // 转换时间格式为时间戳 const data = tasks.map(task => ({ name: task[0], value: [ task[0], new Date(task[1]).getTime(), // 开始时间 new Date(task[2]).getTime() // 结束时间 ] })); const option = { tooltip: { formatter: function(params) { return `${params.name}<br/> 开始: ${formatDate(params.value[1])}<br/> 结束: ${formatDate(params.value[2])}`; } }, xAxis: { type: 'time', min: new Date('2024-01-01').getTime() }, yAxis: { type: 'category', data: tasks.map(task => task[0]) }, series: [{ type: 'bar', data: data, encode: { x: [1, 2], // 使用第2、3个值作为x轴起止 y: 0 // 使用第1个值对应y轴 } }] }; // 时间格式化函数 function formatDate(timestamp) { return new Date(timestamp).toLocaleDateString(); } // 初始化图表 const chart = echarts.init(document.getElementById('ganttChart')); chart.setOption(option); </script> </body> </html> ``` --- ### 四、关键配置说明 1. **数据转换** ```javascript new Date().getTime() // 将日期转为时间戳 ``` 2. **坐标系映射** ```javascript encode: { x: [1, 2], // 数据数组的第2、3项作为x轴起止 y: 0 // 第1项对应y轴类目 } ``` 3. **时间轴配置** ```javascript xAxis: { type: 'time' } // 启用时间坐标系 ``` --- ### 五、扩展功能建议 1. **进度显示** 添加第二条 `bar` 系列显示实际进度 2. **里程碑标记** 使用 `markPoint` 标注关键节点 3. **交互功能** 通过 `dataZoom` 实现时间范围缩放 --- ### 六、注意事项 1. 时间数据必须转换为**时间戳**格式 2. `yAxis.data` 顺序需与任务数据一致 3. 复杂需求可考虑结合 `custom series` 实现更精细控制 需要实时调整任务时,建议结合 WebSocket 或定时器实现数据动态更新。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值