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

 在之前的文章中,我们深入学习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>

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

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

相关文章

目标检测——YOLOv7算法解读

论文&#xff1a;YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (2022.7.6) 作者&#xff1a;Chien-Yao Wang, Alexey Bochkovskiy, Hong-Yuan Mark Liao 链接&#xff1a;https://arxiv.org/abs/2207.02696 代码&#xff1a;h…

Bayes判别示例数据:鸢尾花数据集

使用Bayes判别的R语言实例通常涉及使用朴素贝叶斯分类器。朴素贝叶斯分类器是一种简单的概率分类器&#xff0c;基于贝叶斯定理和特征之间的独立性假设。在R中&#xff0c;我们可以使用e1071包中的naiveBayes函数来实现这一算法。下面&#xff0c;我将通过一个简单的示例展示如…

vue 实现左侧导航栏,右侧锚点定位滚动到指定位置(超简单方法)

项目截图&#xff1a; 实现方法&#xff1a; 点击左侧菜单根据元素id定位到可视内容区域。 浏览器原生提供了一种方法scrollIntoView 。 通过scrollIntoView方法可以把元素滚动到可视区域内。 behavior: "smooth"是指定滚动方式为平滑效果。 具体代码如下&#xf…

Flink CDC详解

文章目录 Flink CDC一 CDC简介1.1 CDC定义1.2 CDC应用场景1.3 CDC实现机制1.4 开源CDC工具对比 二 Flink CDC简介2.1 Flink CDC介绍2.2 Flink CDC Connector(连接器)2.3 Flink CDC && Flink版本2.4 Flink CDC特点 三 Flink CDC发展3.1 发展历程3.2 背景Dynamic Table &…

微软发布Phi-3 Mini,性能媲美GPT-3.5、Llama-3,可在手机端运行

前言 微软发布了最新版的Phi系列小型语言模型(SLM) - Phi-3。这个系列包括3个不同参数规模的版本&#xff1a;Phi-3 Mini (38亿参数)、Phi-3 Small (70亿参数)和Phi-3 Medium (140亿参数)。 Phi系列模型是微软研究团队开发的小规模参数语言模型。从第一代Phi-1到第二代Phi-2&…

深度学习中的熵、交叉熵、相对熵(KL散度)、极大释然估计之间的联系与区别

熵的最初来源于热力学。在热力学中&#xff0c;熵代表了系统的无序程度或混乱程度&#xff0c;也可以理解为系统的热力学状态的一种度量。后来被广泛引用于各个领域中&#xff0c;如信息学、统计学、AI等&#xff0c;甚至社会学当中。接下来将大家领略一下深度学习中熵的应用。…

【高阶数据结构】B树 {B树的概念;B树的实现:节点设计,查找,插入,遍历,删除;B树的性能分析;B+树和B*树;B树的应用}

一、常见的搜索结构 以上结构适合用于数据量相对不是很大&#xff0c;能够一次性存放在内存中&#xff0c;进行数据查找的场景。如果数据量很大&#xff0c;比如有100G数据&#xff0c;无法一次放进内存中&#xff0c;那就只能放在磁盘上了&#xff0c;如果放在磁盘上&#xff…

短视频素材哪里有?8个视频素材免费下载素材库无水印

在这个视觉内容至关重要的时代&#xff0c;每一位视频创作者都需要接触到多样化和高质量的视频素材&#xff0c;以提升作品的吸引力和专业度。以下这些视频素材网站将为你提供从全球各地收集的丰富资源。 1. 蛙学府&#xff08;中国&#xff09; 着重提供有关中国文化和场景的…

黑盒优化系列(一):自动化提示词优化【一、绪论】

大语言模型的提示词 随着ChatGPT等大语言模型的问世&#xff0c;我们获取知识的方式从单一的搜索引擎如Google转变为类似ChatGPT这种通过 Q & A 方式提供的方法。 我们尝试对比一下不同提示词&#xff0c;对应的模型输出 ChatGPT无提示词 API&#xff1a; ChatGPT 3.5 …

牛客NC216 逆波兰表达式求值【中等 栈 C++/Java/Go/PHP】

题目 题目链接&#xff1a;https://www.nowcoder.com/practice/885c1db3e39040cbae5cdf59fb0e9382 核心 栈 参考答案C class Solution {public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可*** param tokens strin…

STM32中的PWM

一、介绍 二、制作一个呼吸灯的效果&#xff08;使用PWM&#xff09; 原理是中心对齐的方式 学会分析复用管脚&#xff08;根据手册&#xff09; 配置 更正:是 最后一个输出的模式 最后生成代码 三、代码 要修改的业务代码 改代码&#xff0c;实现呼吸灯

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

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

网络安全-Diffie Hellman密钥协商

密钥协商是保密通信双方&#xff08;或更多方&#xff09;通过公开信道来共同形成密钥的过程。一个密钥协商方案中&#xff0c;密钥的值是某个函数值&#xff0c;其输入量由两个成员&#xff08;或更多方&#xff09;来提供。密钥协商的记过是参与协商的双方&#xff08;或更多…

政安晨:【Keras机器学习示例演绎】(十五)—— 用于图像分类的 CutMix 数据增强技术

目录 简介 设置 加载 CIFAR-10 数据集 定义超参数 定义图像预处理函数 将数据转换为 TensorFlow 数据集对象 定义 CutMix 数据增强功能 可视化应用 CutMix 扩增后的新数据集 定义 ResNet-20 模型 使用经 CutMix 扩展的数据集训练模型 使用原始非增强数据集训练模型 …

nginx 配置 SSL 证书实现 https 访问

nginx 配置SSL证书实现https访问 1. SSL 证书简介与获取1.1 SSL 证书介绍1.2 获取 SSL 证书 2. nginx 配置 SSL 文件2.1 SSL 文件放置与配置文件修改2.1.1 文件配置2.1.2 强制 https 访问 2.2 验证配置结果 同步发布在个人笔记 nginx 配置 SSL 证书实现 https 访问 配置好 ngi…

Powershell 一键安装 virtio_qemu_agent

前言 qemu-guest-agent qemu-guest-agent是一个助手守护进程,安装在客户机中。它用于在主机和客户端之间交换信息,并在客户端执行命令。 在Proxmox VE中,qemu-guest-agent主要用于三件事: 正确关闭客户机,而不是依赖于ACPI命令或windows策略在进行备份/快照时冻结客户机…

20240309web前端_第四次作业_完成随机点名程序

要求 一、结合抽奖案例完成随机点名程序&#xff0c;要求如下: 1.点击点名按钮&#xff0c;名字界面随机显示&#xff0c;按钮文字由点名变为停止 2.再次点击点名按钮&#xff0c;显示当前被点名学生姓名&#xff0c;按钮文字由停止变为点名 3.样式请参考css及html自由发挥完成…

flutter ios Firebase 消息通知错误 I-COR000005,I-FCM001000 解决

*前提是已经 使用firebase-tools 已经给 Flutter 加入了 消息通知相关配置。教程>> 一、I-COR000005 10.22.0 - [FirebaseCore][I-COR000005] No app has been configured yet. import Firebase....FirebaseApp.configure() 10.22.0 - [FirebaseMessaging][I-FCM001000…

kubernetes中Pod调度-Taints污点和污点容忍

一、污点的概念 所谓的污点&#xff0c;是给k8s集群中的节点设置的&#xff0c;通过设置污点&#xff0c;来规划资源创建是所在的节点 污点的类型 解释说明PreferNoshedule 节点设置这个污点类型后&#xff1b; 表示&#xff0c;该节点接收调度&#xff0c;但是会降低调度的概…

hbase 集成 phoenix 实现 sql 化

1. 依赖 hbase > hbase 集群搭建 2. 下载安装包 点击下载 ps&#xff1a;该网页在内网可能打不开&#xff0c;遇到该情况有条件的可以打开 VPN 在下载 3. 上传解压 使用工具将安装包上传的服务器上 笔者这里选择 上传到 /opt/software 目录&#xff0c;解压到 /opt/mo…