echats 时间直方图示例

需求背景

某订单有N个定时任务,每个任务的执行时间已经确定,希望直观的查看该订单的任务执行趋势

查询SQL:

sql 复制代码
select UNIX_TIMESTAMP(DATE_FORMAT(exec_time,'%Y-%m-%d %H:%i')) execTime, count(*) from `order_detail_task` where order_no = '20240219085752308913310000110' GROUP by execTime order by execTime;

把查询结果copy出来,粘贴到 https://echarts.apache.org/zh/spreadsheet.html,转换成二维数组

把转换好的数据copy出来,代入到 baseData 中的 new Map() 中。

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ECharts 时间直方图</title>
    <!-- 引入 ECharts -->
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.1.2/dist/echarts.min.js"></script>
</head>
<body>
    <!-- 创建一个容器来放置图表 -->
    <div id="chart" style="width: 100%; height: 800px;"></div>

    <script>
        // 创建 ECharts 实例
        var myChart = echarts.init(document.getElementById('chart'));
    
        // 初始数据, 数据库中统计结果, key为时间戳, value为个数
        let baseMap = new Map([[1708304400,8],[1708304460,4],[1708304520,8],[1708304580,4],[1708304640,5],[1708304700,3],[1708304760,10],[1708304820,2],[1708304880,6],[1708304940,5],[1708305000,6],[1708305060,5],[1708305120,6],[1708305180,5],[1708305240,7],[1708305300,6],[1708305600,5],[1708305660,6],[1708305720,9],[1708305780,8],[1708305840,4],[1708305900,10],[1708305960,13],[1708306020,10],[1708306080,13],[1708306140,10],[1708306200,15],[1708306260,10],[1708306320,9],[1708306380,13],[1708306440,11],[1708306500,6],[1708306560,1],[1708306860,2],[1708306920,9],[1708306980,5],[1708307040,4],[1708307100,6],[1708307160,3],[1708307220,4],[1708307280,3],[1708307340,3],[1708307400,5],[1708307460,4],[1708307520,3],[1708307580,2],[1708307640,4],[1708307700,3],[1708307760,6]]);
        // map集合的keyset
        let keys = Array.from(baseMap.keys());
        // 最小key(起始时间戳)
        let startTime = Math.min(...keys);
        // 最大key(结束时间戳)
        let endTime = Math.max(...keys);
        let data = [];
        // 以分钟(60000ms)为步长
        for (let i = startTime; i <= endTime; i += 60) {
            if (baseMap.has(i)) {
                data.push([i*1000, baseMap.get(i)]);
            } else {
                // 第i分钟没有值,则value=0
                data.push([i*1000, 0]);
            }
        }

        option = {
            tooltip: {
                trigger: 'axis',
                position: function(pt) {
                    return [pt[0], '10%'];
                }
            },
            title: {
                left: 'center',
                text: '直方图'
            },
            toolbox: {
                feature: {
                    dataZoom: {
                        yAxisIndex: 'none'
                    },
                    restore: {},
                    saveAsImage: {},
                    magicType: {
                        type: ['line', 'bar']
                    },
                    dataView: {
                        show: true,
                        title: 'Data View'
                    }
                }
            },
            xAxis: {
                type: 'time',
                maxInterval: 60000,
                boundaryGap: false,
                axisLabel: {
                    rotate: 45
                },
            },
            yAxis: {
                type: 'value',
                boundaryGap: [0, '100%']
            },
            dataZoom: [{
                type: 'inside',
                filterMode: 'filter',
                start: 0,
                end: 30
            }, {
                start: 0,
                end: 30
            }],
            series: [{
                name: 'Fake Data',
                type: 'line',
                smooth: true,
                symbol: 'none',
                areaStyle: {},
                data: data
            }]
        };

        // 渲染图表
        myChart.setOption(option);
    </script>
</body>
</html>

效果如下:

相关推荐
h_65432101 天前
echarts实现柱状图加一条横线
前端·echarts
速易达网络1 天前
ECharts 图表制作完全指南:从零到可视化实战
前端·javascript·echarts
paopaokaka_luck1 天前
灾害应急物资管理系统(AI应急助手、Echarts可视化数据看板、捐赠入库联动、 物资全流程管理、库存变动追溯、灾情资讯与互动反馈、物资发放公示)
java·前端·javascript·spring boot·mysql·tomcat·echarts
paopaokaka_luck4 天前
基于springboot+vue的益暖微光公益服务平台(DeepSeek公益助手、善款信息追溯、志愿服务积分闭环、ECharts运营分析、活动状态自动流转)
java·前端·javascript·spring boot·mysql·架构·echarts
腾讯数据架构师5 天前
任务跑完怎么直接出图表?CubeStudio 任务可视化 ECharts 数据格式实操(CSV/JSON + metric.json,11 种图表一键渲染)
前端·json·echarts·数据可视化
总要学点什么6 天前
第81篇:数据可视化-PM2.5分布——让圆点的胖瘦替每座城市报出浓度
前端·信息可视化·echarts·cesium·空间分析
paopaokaka_luck6 天前
社区服务平台(加权协同过滤推荐、Jieba中文词频分析、WebSocket实时聊天、求助处理闭环、 活动积分闭环、ECharts多维分析)
java·前端·spring boot·mysql·echarts·mybatis
mmsx6 天前
Android 并发考古:newThread 与 RxJava 共存,以及 GlobalScope 的三宗罪
android·echarts·rxjava
DataGear7 天前
DataGear 6.1.1 发布,数据可视化分析平台
javascript·信息可视化·数据分析·echarts·数据可视化
paopaokaka_luck8 天前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法