Echarts -- 实现动态加载series

一、需求说明

1.1具体说明

        根据每天的订单,查询出券码(title字段)的核销情况,如下单成功,已核销,取消订单,订单失败,

title字段又分大概七八种,最后数据进行整合完毕之后,前端使用Echarts进行堆叠柱状图显示每天数据。

1.2 需求拆解

        根据时间范围查询出每天的订单数据后,根据字段title与messageType进行聚合分组统计,

查询这一步先略掉,重要的动态加载series在后文。

二、Echarts官网文档

2.1异步数据的加载与动态更新

        Echarts动态加载数据文档

入门示例中的数据是在初始化后setOption中直接填入的,但是很多时候可能数据需要异步加载后再填入。ECharts 中实现异步数据的更新非常简单,在图表初始化后不管任何时候只要通过 jQuery 等工具异步获取数据后通过 setOption 填入数据和配置项就行。

var myChart = echarts.init(document.getElementById('main'));

$.get('data.json').done(function(data) {
  // data 的结构:
  // {
  //     categories: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"],
  //     values: [5, 20, 36, 10, 10, 20]
  // }
  myChart.setOption({
    title: {
      text: '异步数据加载示例'
    },
    tooltip: {},
    legend: {},
    xAxis: {
      data: data.categories
    },
    yAxis: {},
    series: [
      {
        name: '销量',
        type: 'bar',
        data: data.values
      }
    ]
  });
});

   或者先设置完其它的样式,显示一个空的直角坐标轴,然后获取数据后填入数据。 

var myChart = echarts.init(document.getElementById('main'));
// 显示标题,图例和空的坐标轴
myChart.setOption({
  title: {
    text: '异步数据加载示例'
  },
  tooltip: {},
  legend: {
    data: ['销量']
  },
  xAxis: {
    data: []
  },
  yAxis: {},
  series: [
    {
      name: '销量',
      type: 'bar',
      data: []
    }
  ]
});

// 异步加载数据
$.get('data.json').done(function(data) {
  // 填入数据
  myChart.setOption({
    xAxis: {
      data: data.categories
    },
    series: [
      {
        // 根据名字对应到相应的系列
        name: '销量',
        data: data.data
      }
    ]
  });
});

    

三、仿照官网需求实现代码 

3.1 代码

        后端数据涉及信息,所以前端直接模拟数据了

  详细代码如下,引入echarts.min.js后可直接运行

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document01</title>
    <style>
        .box {
            width: 1000px;
            height: 800px;
            background-color: rgb(188, 227, 236);
            margin: auto;
        }
    </style>
</head>

<body>
    <!-- 2.准备具有大小的DOM容器 -->
    <div class="box"></div>

    <script src="../js/echarts.min.js"></script>
    <script>
       
        //3.初始化实例对象 echarts.init(dom容器)
        var myChart = echarts.init(document.querySelector(".box"));
        //颜色盘
        const colors = ['#24c7d5', '#bd1cf2', '#292cf2', '#fc43a2'];
        //3.加载图表数据
        option = {
            title: {
                text: '核销状态图表',
                textStyle: {
                    //文字颜色
                    color: '#588698',
                    //字体风格,'normal','italic','oblique'
                    fontStyle: 'normal',
                    //字体粗细 'normal','bold','bolder','lighter',100 | 200 | 300 | 400...
                    fontWeight: 'bold',
                    //字体系列
                    fontFamily: 'sans-serif',
                    //字体大小
                    fontSize: 18
                },
            },
            color: colors,//调色盘颜色列表 #008000
            tooltip: {//提示框组件
                trigger: 'axis',//触发类型
                axisPointer: {
                    // 坐标轴指示器,坐标轴触发有效
                    type: 'cross', // 默认为直线,可选为:'line' | 'shadow' 'cross'
                    label: {
                        backgroundColor: '#588698'
                    }
                },
            },
            legend: {},
            grid: {
                left: '3%',
                right: '4%',
                bottom: '3%',
                containLabel: true
            },
            toolbox: {
                feature: {
                    saveAsImage: {}
                }
            },
            xAxis: {
                type: 'category',
                boundaryGap: true, // 与0点有一段间隔显示
                axisLine: {
                    lineStyle: {
                        color: '#588698',
                        width: 1,//这里是为了突出显示加上的
                    }
                },
                axisLabel: { // 坐标轴刻度标签的相关设置。
                    interval: 1,
                    rotate: '30'
                },
                data: []
            },
            yAxis: {
                type: 'value'
            },
            // 先设置为空数组,数据在获取数据后动态加载
            series: [  
                
            ]
        };
        // 显示图表
        setTimeout(() => {
            myChart.setOption(option);
            // $(window).resize(myChart.resize());
            console.log("执行更新数据方法")
            updateMyChart()
        }, 1000);

        // 模拟异步加载数据
        function updateMyChart(data) {
            let colorArr=['#88bafe','#ffa304','#8bbb51','#FB7653','#73D0F7'];
            let info = [
                {"title":"满30元减10元券"},
                {"title":"满15元减2元券",},
                {"title":"满20元减5元券"},
                {"title":"7元通兑券"},
            ];
            // 1: 成功下单  2: 已核销 3: 订单失败 4: 订单取消
            let type = [
                {"success":[20,12,15,64,70],"exchange":[30,9,15,61,70],"fail":[20,54,15,64,70],"cancel":[20,64,15,64,70]},
                {"success":[50,84,15,34,70],"exchange":[10,4,25,34,47],"fail":[54,15,64,15],"cancel":[20,54,15,64,54]},
                {"success":[20,64,5,64,70],"exchange":[60,5,35,74,12],"fail":[20,54,70,64,70],"cancel":[20,70,15,64,70]},
                {"success":[10,54,15,64,70],"exchange":[28,54,45,24,70],"fail":[20,54,70,64,15],"cancel":[20,54,15,54,70]},
        
            ];
            // 填入数据
            myChart.setOption({
                xAxis: {
                    data: ['2023-10-09', '2023-10-10', '2023-10-11', '2023-10-12', '2023-10-13']
                },
                series: function () {
                    let serie = []
                    info.forEach((element, index) => {
                        serie.push(
                            {
                                data: type[index].success,
                                name: element.title + "「 成功下单 」",
                                type: "bar",
                                stack: element.title,
                                // itemStyle: {
                                //     color: colorArr[index]
                                // },
                                label: {//图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称
                                    show: false,//在图形上显示标签文字
                                },
                            }
                            ),
                            serie.push(
                            {
                                data: type[index].exchange,
                                name: element.title + "「 已核销 」",
                                type: "bar",
                                stack: element.title,
                                // itemStyle: {
                                //     color: colorArr[index]
                                // },
                                label: {//图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称
                                    show: false,//在图形上显示标签文字
                                },
                            }
                            ),
                            serie.push(
                            {
                                data: type[index].fail,
                                name: element.title + "「 订单失败 」",
                                type: "bar",
                                stack: element.title,
                                // itemStyle: {
                                //     color: colorArr[index]
                                // },
                                label: {//图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称
                                    show: false,//在图形上显示标签文字
                                },
                            }
                            ),
                            serie.push(
                            {
                                data: type[index].cancel,
                                name: element.title + "「 订单取消 」",
                                type: "bar",
                                stack: element.title,
                                // itemStyle: {
                                //     color: colorArr[index]
                                // },
                                label: {//图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称
                                    show: false,//在图形上显示标签文字
                                },
                            }
                            )
                            // {
                            //     name: '下单成功',
                            //     type: 'bar',
                            //     stack: 'type', //设置堆叠,相同参数叠加
                            //     // stack: 'Total',
                            //     emphasis: {//折线图的高亮状态
                            //         focus: 'series'
                            //     },
                            //     label: {//图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称
                            //         show: false,//在图形上显示标签文字
                            //     },
                            //     data: [],//40, 50, 20, 32, 75, 84, 96
                            //     // 设置柱体颜色
                            //     itemStyle: {
                            //         normal: { color: '#24c7d5' }
                            //     }
                            // },
                        
                    });
                    return serie;
                }()
            });
        }
        // // 异步加载数据
        // $.get('data.json').done(function (data) {
        //     // 填入数据
        //     myChart.setOption({
        //         xAxis: {
        //             data: data.categories
        //         },
        //         series: [
        //             {
        //                 // 根据名字对应到相应的系列
        //                 name: '销量',
        //                 data: data.data
        //             }
        //         ]
        //     });
        // });
    </script>
</body>

</html>

3.2 重要实现拆解说明

  •  开始先设置
    xAxis: {},
    series: []

        这两个配置项为空,一开始先展示空盒子

  • 之后根据官方文档的异步加载数据,把数据配置进配置项
 // // 异步加载数据
        $.get('data.json').done(function (data) {
            // 填入数据
            myChart.setOption({
                xAxis: {
                    data: data.categories
                },
                series: [
                    {
                        // 根据名字对应到相应的系列
                        name: '销量',
                        data: data.data
                    }
                ]
            });
        });
  •  由于我们需要展示的是堆叠柱状图,所以需要配置stack: 'xxx',每一列相同的stack即可堆叠在一起
  • 最后则是一些配置相关的东西了,可以自己去diy设置     

最后运行结果如下gif

3.3 标签查看详细数据

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/157786.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL 数据类型

文章目录 PostgreSQL数据类型说明PostgreSQL数据类型使用单引号和双引号数据类型转换布尔类型数值类型整型浮点型序列数值的常见操作 字符串类型日期类型枚举类型IP类型JSON&JSONB类型复合类型数组类型 PostgreSQL数据类型说明 PGSQL支持的类型特别丰富&#xff0c;大多数…

用户运营:如何搭建用户分析体系

在运营的工作范畴中&#xff0c;用户运营是很重要的一个环节&#xff0c;甚至有公司会设置专门的“用户运营”岗位。 用户运营的价值体现在多个方面&#xff0c;不仅可以帮助引流、吸引更多用户使用产品&#xff0c;在用户正式使用产品之后的运营则更为重要。通过日常用户运营&…

深度学习到智能小车(1)深度学习框架

0.前提 最近新开了一门叫机器学习的课程&#xff0c;老师一直在跟我们讲一些有关这方面的知识&#xff0c;告诉我们一定要学好数学&#xff0c;因为数学是算法的基础。我手上的donkeycar刚好也涉及到Keras深度神经网络&#xff0c;所以出于好奇我去图书馆借回了一本叫《Keras深…

Fedora 项目近日发布了 Fedora Linux 39

导读几经推迟之后&#xff0c;Fedora 项目近日发布了 Fedora Linux 39&#xff0c;这是红帽公司赞助的面向大众的 GNU/Linux 发行版的最新稳定版本&#xff0c;采用了最新的技术和开源应用程序。 Fedora Linux 39 由 Linux 内核 6.5 支持&#xff0c;并提供了一些最新的桌面环境…

顺序表在线OJ题(详解+图解)

1&#xff1a;原地移除数组中所有的元素val&#xff08;时间复杂度为O(N)空间复杂度为O(1)&#xff09; 题目的大概意思是&#xff1a;用户自行输入一个数组&#xff0c;还要输入一个val的整形值&#xff0c;然后从数组中移除等于val的元素 我们根据题目的要求&#xff0c;时间…

处理机器学习数据集中字符串列(pandas.get_dummies)

如图&#xff0c;在数据集中week列的数据不是数值型&#xff0c;会导致我们在训练过程中难以处理。 而pandas库中有一个非常好用的函数&#xff0c;独热编码pandas.get_dummies(df) 使用此函数之后&#xff0c;会在原数据中新建各列代表Fri-Sun&#xff0c;值为0或1&#xff…

vscode调试pytorch的DistributedDataParallel代码

这里写自定义目录标题 一、查找launch.py二、修改launch.json三、特别提醒3.1 错误的写法3.2 正确的写法 一、查找launch.py 使用代码。 find / -name launch.py | grep distributed得到的结果如下 这里我们得到了两个结果&#xff0c;看目标文件的路径名&#xff0c;第二个…

系统韧性研究(5)| 常用的系统韧性技术

如果不利事件或条件导致系统无法正常运行&#xff0c;则它们可能会对有价值的资产造成各种形式的损害。正如我在本系列的前几篇文章中概述的那样&#xff0c;系统韧性很重要&#xff0c;因为没有人想要一个无法克服“不可避免的逆境”的脆弱系统。 在本系列的第一篇文章中&…

怎么为pdf加水印?

怎么为pdf加水印&#xff1f;最近很多小伙伴都有这样的疑问。你可以在浏览器上搜索一下&#xff0c;关于这方面的很多还是有很多人不是很清楚的。虽然我们自己在很多PDF文件上都看到了水印&#xff0c;那么真的到了自己这边需要进行操作的时候&#xff0c;确实还是有些这样或是…

PHPStorm PHP-CS-Fixer

我用的是brew安装&#xff1a; brew install php-cs-fixer phpstorm配置&#xff1a; setting搜索fixer 指定安装php-cs-fixer的目录&#xff1a; https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/master/doc/installation.rst 图文详解PHPStorm实现自动执行代码格式化-…

如何利用TSINGSEE青犀智能分析网关算法从人员、设备、行为三大角度进行监狱智能化升级改造

监狱作为关押犯人的重要场所&#xff0c;十分需要全天候全方位无死角的监控&#xff0c;但由于狱警人力有限&#xff0c;无法达到目前的监控需求。并且在监狱中&#xff0c;犯人众多也极易发生口角冲突&#xff0c;如若没有及时处理&#xff0c;就会发生难以挽回的意外。如何更…

AnimateDiff搭配Stable diffution制作AI视频

话不多说&#xff0c;先看视频 1. AnimateDiff的技术原理 AnimateDiff可以搭配扩散模型算法&#xff08;Stable Diffusion&#xff09;来生成高质量的动态视频&#xff0c;其中动态模型&#xff08;Motion Models&#xff09;用来实时跟踪人物的动作以及画面的改变。我们使用 …

【大话Presto 】- 核心概念

文章目录 前言Operator Model And Iterator Model系统组成Connector数据模型查询执行模型StatementStageTaskSplitDriverOperatorExchangePipeLine 总结 前言 Presto&#xff08;PrestoDB&#xff09;是一个FaceBook开源的分布式MPP SQL引擎&#xff0c;旨在处理大规模数据的查…

【硬核】把一个MOS管制作成开关电路

你要是想读懂这篇文章&#xff0c;请先去了解MOS管的基础知识&#xff0c;本文是在基础之上做出的一部分扩展&#xff0c;可能有一点点深&#xff0c;请各位同学注意。 本文带你了解MOS管的开通/关断原理&#xff0c;使用PMOS做上管、NMOS做下管都是比较方便&#xff0c;使用PM…

「分享学习」SpringCloudAlibaba高并发仿斗鱼直播平台实战完结

[分享学习]SpringCloudAlibaba高并发仿斗鱼直播平台实战完结 第一段&#xff1a;简介 Spring Cloud Alibaba是基于Spring Cloud和阿里巴巴开源技术的微效劳框架&#xff0c;普遍应用于大范围高并发的互联网应用系统。本文将引见如何运用Spring Cloud Alibaba构建一个高并发的仿…

设计模式之桥接模式--连接抽象与实现(你想知道的问题都有)

目录 概述结构型设计模式桥接模式的定义桥接模式的角色和关系 版本迭代紧耦合版增加品牌两个品牌两款软件松耦合的设计版本迭代业务分析总结 问题升华抽象与实现抽象包含的一些方法或属性依赖于实现部分的接口关联关系与桥接模式桥接模式适合情况谁是实现&#xff0c;谁是抽象组…

希亦ACE和小吉内衣洗衣机选哪个?两款洗衣机对比

内衣洗衣机可以称得上是实现幸福的小家电&#xff0c;它不仅懒人的福音还是我们打工人的福音&#xff0c;在每天下班之后可以有时间休息了&#xff0c;洗完澡还有要手洗内衣裤&#xff0c;真的很痛苦&#xff0c;拥有了内衣洗衣机简直是一件非常幸福的事情&#xff0c;但现在市…

源码安装prometheus(普罗米修斯监控)

IP角色系统规格192.168.0.38Prometheus 服务端CentOS 74c8g192.168.0.25node_exporter 客户端CentOS 74c8g 普罗米修斯下载网址: Download | Prometheus 1.下载prometheus [rootprometheus opt]# wget https://github.com/prometheus/prometheus/releases/download/v2.47.2…

可以免费使用的设计素材网站分享

UI设计师最怕什么&#xff1f; 没有创意&#xff0c;没有灵感&#xff0c;没有思路&#xff01; 在哪里可以得到idea&#xff1f;别担心&#xff0c;往下看&#xff01; 你知道网络有多大&#xff0c;你想要什么吗&#xff1f;今天&#xff0c;我想和大家分享一些宝藏网页设…

榜首揭秘:热门产品原型设计工具TOP10

在现代产品制作和创新过程中&#xff0c;原型设计工具起着不可或缺的作用。这些工具为设计师、开发人员和团队提供了更深入的理解&#xff0c;以便核实和呈现他们的设计想法。根据项目的特性&#xff0c;可能需要使用各种类型的工具&#xff0c;因此&#xff0c;我们将在此篇文…