Echarts -- 实现动态加载series

news2024/11/24 12:27:21

一、需求说明

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.coloradmin.cn/o/1220119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

torch - FloatTensor标签(boolean)数值转换(1/0)

当我们数据集的标签为True/False的boolean型时&#xff0c;我们可以直接使用FloatTensor传入该标签。返回的数据为tensor([0.])或者tensor([1.])&#xff0c;这十分有利于二分类任务的预测标签对错判断。 这个用法是基于Python的布尔类型与整数之间的隐式类型转换。在Python中&…

【大话Presto 】- 核心概念

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

EMP.DLL是什么东西?怎么解决EMP.DLL文件缺失

在我们使用电脑的过程中&#xff0c;有时会遇到一些特定的错误提示&#xff0c;比如“emp.dll文件缺失”。这样的提示对许多用户来说可能一脸懵逼&#xff0c;不知道怎么处理&#xff0c;那么&#xff0c;究竟什么是emp.dll&#xff1f;它的缺失会产生什么影响&#xff1f;又应…

Linux 基础操作手记四

文章目录 环境变量生效配置python版本安装SSH关闭GUIvi 清空 环境变量生效 source ~/.bashrc # 或 source ~/.zshrc 配置python版本 sudo add-apt-repository ppa:deadsnakes/ppa sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1 sudo upd…

Logrotate日志切割工具的应用与配置

Logrotate日志切割工具的应用与配置&#xff0c;以下是公司生产环境亲测&#xff0c;跳了不少的坑&#xff0c;最后已经部署到生产了&#xff0c;可放心使用 简介 Logrotate是一个在Unix和类Unix系统&#xff08;如Linux&#xff09;上用于管理日志文件的实用程序。它可以帮助…

html书本翻页效果,浪漫表白日记本(附源码)

文章目录 1.设计来源1.1 书本正面1.2 界面1-21.3 界面3-41.4 界面5-61.5 界面7-81.6 界面9-101.7 界面11-121.8 书本结尾 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/1…

Michael.W基于Foundry精读Openzeppelin第38期——AccessControlEnumerable.sol

Michael.W基于Foundry精读Openzeppelin第38期——AccessControlEnumerable.sol 0. 版本0.1 AccessControlEnumerable.sol 1. 目标合约2. 代码精读2.1 supportsInterface(bytes4 interfaceId)2.2 _grantRole(bytes32 role, address account)2.3 _revokeRole(bytes32 role, addre…

系列一、请谈谈你对JVM的理解?Java8的虚拟机有什么更新?

一、请谈谈你对JVM的理解&#xff1f;Java8的虚拟机有什么更新&#xff1f; JVM是Java虚拟机的意思。它是建立在操作系统之上的&#xff0c;由类加载器子系统、本地方法栈、Java栈、程序计数器、方法区、堆、本地方法库、本地方法接口、执行引擎组成。 &#xff08;1&#xff0…

UniPro提高集成能力 让客户专注于交付价值

一千个哈姆莱特就有一千个读者&#xff0c;一千个开发团队&#xff0c;也会有各不相同的软件工具和工作流程。工具与工具之间&#xff0c;功能上的割裂亦或重叠&#xff0c;都会给企业和团队的协作带来阻塞&#xff0c;结果就会导致团队之间各自为战、信息孤岛的形成以及资源的…

TikTok与未来城市:数字社交如何影响城市发展

在数字化时代的浪潮中&#xff0c;社交媒体的兴起不仅仅改变了我们的个人生活&#xff0c;还深刻地影响了城市的发展和演变。其中&#xff0c;TikTok作为一款备受欢迎的短视频平台&#xff0c;正悄然改变着城市文化、社交互动和城市规划。本文将深入探讨TikTok对未来城市的影响…

Web server failed to start. Port 8080 was already in use.

Windows 服务端口被占用&#xff0c;杀死进程命令&#xff1a; netstat -ano | findstr 8080taskkill -PID [xxx] -F

电子科技大学 分布式系统 期末复习笔记

第一章 为什么需要分布式系统&#xff1a;功能分离&#xff0c;固有的分布性&#xff0c;负载均衡&#xff0c;可靠性&#xff0c;经济性。 定义&#xff1a;分布式系统是这样一种系统&#xff0c;其中位于联网计算机上的组件仅通过传递消息来通信和协调它们的操作。 特点&am…

Smart Tomcat的使用

文章目录 Smart Tomcat的作用Smart Tomcat的安装Smart Tomcat的配置Smart Tomcat的启动 Smart Tomcat的作用 我们知道使用Servlet来完成一个项目一共需要七个步骤&#xff0c;即创建maven项目、添加依赖、创建目录结构、编写代码、打包程序、部署程序、验证程序。这样的确是完…

Mysql之多表查询下篇

Mysql之多表查询下篇 满外连接的实现UNION关键字UNIONUNION ALL操作符 7种SQL JOINS的实现语法格式小结自然连接USING连接表连接的约束条件 满外连接的实现 在上篇博客中&#xff0c;我们可以了解到在Mysql中是不支持FULL JOIN来实现 满外连接的&#xff0c;那么我们在Mysql采用…

Leetcode—2760.最长奇偶子数组【简单】

2023每日刷题&#xff08;三十一&#xff09; Leetcode—2760.最长奇偶子数组 实现代码 #define MAX(a, b) ((a > b) ? (a): (b)) int longestAlternatingSubarray(int* nums, int numsSize, int threshold){int ans 0;int i 0;while(i < numsSize) {if(nums[i] >…

Wi-Fi 网络管理的最佳实践

无论是机场、银行、医院、IT 组织还是 MSP&#xff0c;如今 Wi-Fi 网络都在随处部署和使用。由于其成本效益、灵活性和简化的可扩展性&#xff0c;无线网络现已作为其 IT 基础设施的一部分被整合到许多网络中。但是&#xff0c;设置和管理 Wi-Fi 网络的任务并不像最终用户访问它…

【EI会议征稿】第五届人工智能与机电自动化国际学术会议(AIEA 2024)

第五届人工智能与机电自动化国际学术会议&#xff08;AIEA 2024&#xff09; 2024 5th International Conference on Artificial Intelligence and Electromechanical Automation 第五届人工智能与机电自动化国际学术会议&#xff08;AIEA 2024&#xff09;将于2024年3月8-10…

如何使用Matplotlib模块的text()函数给柱形图添加美丽的标签数据?

如何使用Matplotlib模块的text函数给柱形图添加美丽的标签数据&#xff1f; 1 简单引入2 关于text()函数2.1 Matplotlib安装2.2 text()引入2.3 text()源码2.4 text()参数说明2.5 text()两个简单示例 3 柱形图绘制并添加标签3.1 目标数据3.2 读取excel数据3.3 设置窗口大小和xy轴…

编译安装redis及配置多实例

yum安装是这种十分简单的方法我们就不在提及了&#xff0c;今天我们来做一下redis的编译安装 Redis源码包官方下载链接&#xff1a;http://download.redis.io/releases/ 一、编译安装&#xff1a; 安装依赖包 dnf -y install make gcc jemalloc-devel systemd-devel如果是…

配置环境-insightface-torch

1. 创建环境&#xff1a;conda create -n insightface2 python3.8 2.安装pytorch: 我的cuda 是 11.3 然后进入 pytorch 官网查找对应cuda 版本 pytorch 安装 建议使用 pip # CUDA 11.3 conda install pytorch1.12.1 torchvision0.13.1 torchaudio0.12.1 cudatoolkit11.3 -…