数据可视化-ECharts Html项目实战(14)

news2024/11/16 23:52:05

 在之前的文章中,我们深入学习ECharts鼠标左键触发。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。

数据可视化-ECharts Html项目实战(13)-CSDN博客文章浏览阅读2.7k次,点赞42次,收藏35次。今天的文章,我会以鼠标左键触发为例带着大家学习ECharts特殊图表设置中组件交互的行为事件。希望你能在本篇文章中有所收获。希望我的文章能帮助到正在学习的你,也欢迎各位来本篇文章下一起交流学习,共同进步。https://blog.csdn.net/qq_49513817/article/details/137893581今天的文章,我会以多表联动图实现分析某学校录取率为例带着大家学习ECharts特殊图表设置中异步加载与加载动画的实现。希望你能在本篇文章中有所收获。

目录

一、知识回顾

鼠标触发

组件交互拓展

二、异步加载与加载动画

什么是异步加载?

异步加载的优点

异步加载的使用

三、加载动画的设置

拓展-实例完整代码

data01.json数据

data02.json数据

图表完整代码

一、知识回顾

鼠标触发

 在上一篇文章中,我们学习了EChats中的组件交互的鼠标左键事件的案例。

在我们的组件交互中,我们可以设置许多的交互功能,它往往会使得我们的图表更加的多元化,实例化,功能化提高图标的交互性。

而上一篇文章中,我们使用了鼠标左键触发为例子

使得我们的图表左键单击会生成相应的提示框

并拓展了我们的鼠标触发形式

组件交互拓展

关键字交互功能描述
数据区域缩放dataZoom允许用户通过鼠标滚轮或拖拽来缩放图表的数据区域,以便查看数据的不同细节层次。
拖拽重计算dragRecalculate用户可以通过拖拽图表中的某个部分,实时更新数据并重新计算图表,以便更直观地了解数据的变化趋势。
数据视图切换toolbox.feature.dataView提供数据视图切换功能,用户可以在图表和数据表格之间切换,方便对比和查看数据。
联动linkage支持多个图表之间的联动,当一个图表的数据发生变化时,其他关联的图表也会相应地更新,实现数据的一致性和同步性。
提示框tooltip当用户将鼠标悬停在图表上时,显示一个提示框,展示该点的详细数据,方便用户快速获取数据点的信息。
选中与取消选中selectedMode允许用户通过点击图表中的元素来选中或取消选中它们,进而触发相关的事件或操作。
标记与取消标记marking用户可以在图表上添加标记,以突出显示特定的数据点或区域,方便后续的分析和讨论。
自定义事件eventHandler开发者可以自定义图表的事件处理函数,以便在特定的交互动作发生时执行自定义的逻辑或操作。

二、异步加载与加载动画

什么是异步加载?

ECharts的异步加载是指在图表初始化后,通过异步的方式获取数据,并在数据获取完成后使用setOption方法将数据填入图表中。这种加载方式适用于需要从我们自己的本地或者网上的服务器又或其他数据源动态获取数据的情况。

异步加载的优点

  • 提高性能:异步加载允许在获取数据的同时进行其他操作,避免了因等待数据而导致的页面或应用的阻塞。这样可以提高页面的响应速度和用户体验。
  • 灵活性:通过异步加载,可以实现数据的实时更新和动态展示。当数据源发生变化时,图表可以立即反映这些变化,使得数据展示更加灵活和实时。
  • 降低资源消耗:对于超大的数据量,异步加载可以支持对流数据的动态渲染,只加载和渲染需要的数据,从而节省了系统资源,减少了数据加载的等待时间。
  • 错误处理:异步加载通常与错误处理机制结合使用,当数据获取失败时,可以显示错误提示或采取其他补救措施,增强了应用的健壮性。

异步加载的使用

和往常不一样,今天我们无需将我们的数据文件写在data中,我们单独创建我们的json文件,将我们的数据写入。 

 再来看表结构

在series中,我们也无需引入我们的数据,只需写好name和类型。

那么我们如何引入我们之前写好的json中的数据呢?

我的代码段使用了JavaScript的fetch API从服务器获取数据。从本地文件夹中的一个文件data01.json获取数据,并将其解析为JSON格式。 

这个代码段是从我们的data01中获取数据更新图表

完整代码段

    fetch('data01.json')  //文件夹地址,不使用全局地址
            .then(response => response.json()) // 解析为JSON  
            .then(data => {  
                var seriesData = data.map(item => ({  
                    value: item.rate, // rate属性表示录取率  
                    name: item.year //year属性表示年份  
                }));  
                // 更新选项以包含数据 
                $('#selection').change(function() {  
            var themeName = $(this).val();  
             })  
                option1.series[0].data = seriesData;  
  })  

三、加载动画的设置

加载动画我们需要创建一个动画蒙版

像这样我们就可以将它插入上面的代码段中

运行我们就可以得到我们想要的效果

得益于我们异步加载的处理速度快,我们少量数据是往往是看不到这个页面的,所以,在学习阶段为了凸显我们的动画效果,可以给它设置一个延时效果

 和动画一样插入即可

完整代码段

    fetch('data01.json')  //文件夹地址,不使用全局地址
            .then(response => response.json()) // 解析为JSON  
            .then(data => {  
                myChart1.showLoading({
                text:'请您稍等片刻',
                textStyle:{fontSize:35,color:'#668B8B'},
                effect:'bubble',
                color:'#98F5FF',//转圈颜色
                textColor:'#668B8B',//文字颜色
                maskColor:'#F0FFFF'//蒙版颜色
                });
                // data01数据文件里是一个包含录取率的对象数组  
                var seriesData = data.map(item => ({  
                    value: item.rate, // rate属性表示录取率  
                    name: item.year //year属性表示年份  
                }));  
                // 更新选项以包含数据 
                $('#selection').change(function() {  
            var themeName = $(this).val();  
             })   
                option1.series[0].data = seriesData;  
                // 使用更新后的选项设置图表  
                setTimeout(() => {  
            // 隐藏loading  
            myChart1.hideLoading();  
            // 使用更新后的选项设置图表
            myChart1.setOption(option1);  
        }, 800); // 0.8秒
        myChart1.on('click', function(params) {  
            alert("即将跳转到学校官网 " );  
            window.open('https://www.hbnu.edu.cn/');  
        }); 

    })  

拓展-实例完整代码

data01.json数据
[  
    {  
        "year": "2021",  
        "rate": 0.4134  
    },  
    {  
        "year": "2022",  
        "rate": 0.3122  
    },  
    {  
        "year": "2023",  
        "rate": 0.2417  
    }  
]
data02.json数据
[  
    {  
        "year": "2021年",  
        "enrollment": 327,  
        "rate": 99  
    },  
    {  
        "year": "2022年",  
        "enrollment": 577,  
        "rate": 180  
    },  
    {  
        "year": "2023年",  
        "enrollment": 880,  
        "rate": 179  
    }  
]
图表完整代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/echarts.js"></script>
    <script src="js/jquery-3.3.1.js"></script>
</head>
<body>
    <div id="main1" style="width: 600px; height: 500px"></div>
    <div id="main2" style="width: 600px; height: 500px"></div>
    <script type="text/javascript">
 
    var myChart1 = echarts.init(document.getElementById("main1"));
            var option1 = {  
            title: {  
                text: '某大学计算机科学与技术录取率'  
            },  
            tooltip: { 
                trigger: 'item',  
                formatter: '{a} <br/>{b}: {c} ({d}%)' // 格式化提示框内容  
            },  
            legend: { 
                orient: 'vertical',  
                left: 'left',  
                data: ['2021', '2022', '2023'], 
                top:'30',
            },  
            series: [{  
                name:'计算机科学与技术录取率比',
                type: 'pie', 
                radius: '50%',  
                labelLine: {  
                    show: true  
                },  
                emphasis: { // 高亮状态下的样式  
                    label: {  
                        show: true,  
                        fontSize: '30',  
                        fontWeight: 'bold'  
                    }  
                }  
            }]  
        };
 
    var myChart2 = echarts.init(document.getElementById("main2"));
    var option2 = {   
        title: {  
                text: '计算机科学与技术报录比'  
            },  
        backgroundColor:'rgba(128,128,128,0.1)',
            tooltip:{trigger:'axis'},
            legend:{data:['录取数'],left:'center',top:12},
            xAxis:[
                {
                    type:'category',
                    data: ['2021年', '2022年', '2023年'],
                }
            ],
            yAxis: [
                    {
                    type: 'value',
                    name: '录取数',
                    max:'900',
                    interval:50,
                    axisLine: {lineStyle:{color:'blue'}},
                    axisLabel: {formatter: '{value}'}
                    },              
                ],
            series:[
                {
                    name:'报名数',type:'bar',
                    
                },
                {
                    name:'录取数',type:'line',
                    
                }
            ]
        };

    fetch('data01.json')  //文件夹地址,不使用全局地址
            .then(response => response.json()) // 解析为JSON  
            .then(data => {  
                myChart1.showLoading({
                text:'请您稍等片刻',
                textStyle:{fontSize:35,color:'#668B8B'},
                effect:'bubble',
                color:'#98F5FF',//转圈颜色
                textColor:'#668B8B',//文字颜色
                maskColor:'#F0FFFF'//蒙版颜色
                });
                // data01数据文件里是一个包含录取率的对象数组  
                var seriesData = data.map(item => ({  
                    value: item.rate, // rate属性表示录取率  
                    name: item.year //year属性表示年份  
                }));  
                // 更新选项以包含数据 
                $('#selection').change(function() {  
            var themeName = $(this).val();  
             })   
                option1.series[0].data = seriesData;  
                // 使用更新后的选项设置图表  
                setTimeout(() => {  
            // 隐藏loading  
            myChart1.hideLoading();  
            // 使用更新后的选项设置图表
            myChart1.setOption(option1);  
        }, 800); // 0.8秒
        myChart1.on('click', function(params) {  
            alert("即将跳转到学校官网 " );  
            window.open('https://www.hbnu.edu.cn/');  
        }); 

    })  


   fetch('data02.json')  
    .then(response => response.json())  
    .then(data => {  
            myChart2.showLoading({
            text:'请您稍等片刻',
            textStyle:{fontSize:35,color:'#668B8B'},
            effect:'bubble',
            color:'#98F5FF',
            textColor:'#458B74',
            maskColor:'#FFF5EE'
        });
        // 提取报名数和录取数数据  
        var enrollmentData = data.map(item => item.enrollment);  
        var rateData = data.map(item => item.rate);  
          
        // 更新系列数据  
        option2.series[0].data = enrollmentData; // 报名数数据  
        option2.series[1].data = rateData; // 录取数或录取率数据  
          
        setTimeout(() => {  
            // 隐藏loading  
            myChart2.hideLoading();  
            // 使用更新后的选项设置图表  
            myChart2.setOption(option2);  
        }, 1500); // 1.5秒  
        myChart2.on('click', function(params) {  
            alert("即将跳转到学校官网" );  
            window.open('https://www.hbnu.edu.cn/');  
        }); 
    }) 

    myChart1.group = 'group1';
    myChart2.group = 'group1';
    echarts.connect('group1');
</script>
</body>
</html>

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

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

相关文章

Open-Sora:开源版的Sora

项目简介 本项目希望通过开源社区的力量复现Sora&#xff0c;由北大-兔展AIGC联合实验室共同发起&#xff0c;当前我们资源有限仅搭建了基础架构&#xff0c;无法进行完整训练&#xff0c;希望通过开源社区逐步增加模块并筹集资源进行训练&#xff0c;当前版本离目标差距巨大&…

java多功能手机

随着科技的发展&#xff0c;手机的使用已经普及到每个家庭甚至个人&#xff0c;手机的属性越来越强大&#xff0c;功能也越来越多&#xff0c;因此人们在生活中越来越依赖于手机。 任务要求&#xff0c;使用所学知识编写一个手机属性及功能分析程序设计&#xff0c;测试各个手机…

国产POL8903 LVDS转MIPI带旋转功能方案介绍

一、芯片简介 1、系统 高性能 MIPS 32bit CPU 内核&#xff1a; 高性能 DSP 内核图像处理单元 16KB指令 Cache 16KB数据 Cache 96KB片上 SRAM 内嵌DDR3控制器 2、 LVDS 输入 支持1或者2通道 LVDS 输入 支持最大1920x108060Hz输入 兼容 VESA 和 JEIDA 格式 通道内5条…

「ChatGPT」掀起新一轮AI热潮!超越GPT-4 Turbo,商汤日日新大升级!

目录 拳打 GPT-4 Turbo &#xff0c;脚踢 DALLE 3 端侧大模型&#xff0c;唯快不破 AI 应用落地需要一个即插即用的大模型超市 并不存在 AI 这个行业&#xff0c;只有 AI行业&#xff0c;强调 AI 需要与传统产业合作&#xff0c;这种关系是结合与赋能&#xff0c;而不是颠覆…

设计模式-状态模式在Java中的使用示例-信用卡业务系统

场景 在软件系统中&#xff0c;有些对象也像水一样具有多种状态&#xff0c;这些状态在某些情况下能够相互转换&#xff0c;而且对象在不同的状态下也将具有不同的行为。 为了更好地对这些具有多种状态的对象进行设计&#xff0c;我们可以使用一种被称之为状态模式的设计模式…

Adobe Illustrator 2024 v28.4.1 (macOS, Windows) - 矢量绘图

Adobe Illustrator 2024 v28.4.1 (macOS, Windows) - 矢量绘图 Acrobat、After Effects、Animate、Audition、Bridge、Character Animator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、Lightroom Classic、Media Encoder、Photoshop、Premiere Pro、Adobe XD 请…

【注解和反射】获取类运行时结构

继上一篇博客【注解和反射】类加载器-CSDN博客 目录 七、获取类运行时结构 测试 getFields()和getDeclaredFields() getMethods()和getDeclaredMethods() 七、获取类运行时结构 获取类运行时结构通常指的是在Java等面向对象编程语言中&#xff0c;使用反射&#xff08;Ref…

【git学习】Git 的基本操作

文章目录 &#x1f680;创建 Git 本地仓库&#x1f680;配置 Git&#x1f680;认识⼯作区、暂存区、版本库&#x1f680;添加⽂件操作 &#x1f680;创建 Git 本地仓库 仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制&#xff0c;就必须先创建⼀个仓库出来。 …

谷歌发布基于声学建模的无限虚拟房间增强现实鲁棒语音识别技术

声学室模拟允许在AR眼镜上以最少的真实数据进行训练&#xff0c;用于开发鲁棒的语音识别声音分离模型。 随着增强现实&#xff08;AR&#xff09;技术的强大和广泛应用&#xff0c;它能应用到各种日常情境中。我们对AR技术的潜能感到兴奋&#xff0c;并持续不断地开发和测试新…

web前端框架设计第六课-样式绑定

web前端框架设计第六课-样式绑定 一.预习笔记 1.class属性绑定 给P标签绑定一个类样式&#xff0c;类名为active。当active取值为true时&#xff0c;表示绑定样式成功&#xff0c;取值为false时&#xff0c;取消绑定 以对象形式给P标签绑定多个类样式 以数组形式给P标签绑定多…

网络安全新挑战:通用人工智能(AGI)等级保护指南

通用人工智能&#xff08;AGI&#xff09;的发展现状及趋势 随着2023年大语言模型应用的划时代突破&#xff0c;以ChatGPT为杰出代表的此类技术犹如一股洪流&#xff0c;彻底颠覆了人类与机器智能交互的疆界&#xff0c;引领通用人工智能&#xff08;AGI&#xff09;步入一个崭…

网络基础(day3)建议在电脑端注册登陆观看!!!

【 理论重点】 网络是什么&#xff1f; &#xff08;网络是载体&#xff0c;目的是传输互联网中的数据&#xff0c;数据是终端产生<手机、电脑、服务器等>。&#xff09; 如何组件网络&#xff08;良性网络架构&#xff09;&#xff1f;有网络架构思维&#xff0c;得按层…

宜搜科技死磕港交所上市:从搜索引擎到广告投放,业绩疲态凸显

近日&#xff0c;宜搜科技控股有限公司&#xff08;下称“宜搜科技”&#xff09;向港交所递交招股书&#xff0c;计划在香港主板上市&#xff0c;中银国际为其独家保荐人。 值得注意的是&#xff0c;宜搜科技已在资本市场辗转多年。该公司曾于2014年向纽交所递交上市申请&…

easyExcel快速入门

目录 &#x1f9c2;1.简单介绍 &#x1f32d;2.快速入门 &#x1f953;1.导入依赖 &#x1f37f;2.导出到excel &#x1f38f;3.读入数据 &#x1f389;4.下载 1.简单介绍 传统操作Excel大多都是利用Apach POl进行操作的,但是POI框架并不完善,使用过程非常繁琐且有较多…

Github进行fork后如何与原仓库同步

前言 fork了一个仓库以后怎么同步源仓库的代码&#xff1f; 步骤 1、执行命令 git remote -v 查看你的远程仓库的路径。 以一个实际例子说明&#xff0c; 来源仓库&#xff1a; TheFirstLineOfCode/basaltgit remote -v得到&#xff1a; origin https://github.com/ghmi…

Redis之路系列(5)功夫在诗外

5 拓展篇—功夫在诗外 6.0新特性 相对都比较鸡肋&#xff0c;谨慎在生产环境使用 ACL安全策略 Redis6版本推出了ACL(Access Control List)访问控制权限 的功能&#xff0c;基于此功能&#xff0c;可以设置多个用户&#xff0c;并且给每个用户单独设 置命令权限和数据权限。 …

机器学习/算法工程师面试题目与答案-深度学习部分1

机器学习/算法工程师面试题目与答案-深度学习部分 BatchNormalization的作用梯度消失循环神经网络&#xff0c;为什么好?什么是GroupConvolution什么是RNN神经网络中权重共享的是&#xff1f;神经网络激活函数&#xff1f;为什么在深度学习中常进行finetuning画GRU结构图什么是…

python+django校园社交高校交友网站2x7r5.

本课题使用Python语言进行开发。代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中&#xff0c;方便对数据进行操作本课题基于WEB的开发平台&#xff0c;设计的基本思路是&#xff1a; 前端&#xff1a;vue.jselementui 框架&#…

探索Web3:去中心化的互联网新时代

引言 在过去的几十年里&#xff0c;互联网已经改变了我们的生活方式、商业模式以及社交互动方式。然而&#xff0c;一个新的技术浪潮——Web3正在崭露头角&#xff0c;预示着一个去中心化的互联网新时代的来临。本文将深入探讨Web3技术的定义、特点以及其对未来互联网发展的影…

跨平台SIP 客户端-linphone下载、使用、开启视频H264

linphone 介绍 Linphone 是一种开源的语音和视频通信应用程序&#xff0c;它提供了基于互联网协议&#xff08;IP&#xff09;的实时通信功能。用于语音/视频通话、即时消息和电话会议的开源 SIP 电话。它适用于移动和桌面环境&#xff08;iOS、Android、GNU/Linux、macOS、Win…