ECharts数据可视化 数据集与事件 入门基础知识【2】

news2024/9/21 14:48:29

echarts一个基于 JavaScript 的开源可视化图表库。其有丰富的图表类型、强大的渲染引擎、专业多维度的数据分析、灵活配置的可视化设计。关于echarts的下载安装以及在项目中使用的基础知识我们前面已经回顾过了: ECharts 数据可视化 入门基本知识 下载安装常用的图表 【1】-CSDN博客

这里主要回顾echarts的点击事件以及回调函数、服务端渲染数据、异步获取数据等基本知识。有问题欢迎评论区留言,谢谢。

目录

1.事件与行为

1.1 绑定一个事件 

1.2 事件的回调函数 

1.3 图标空白事件 

 2.服务端渲染

2.1 服务端 SVG 渲染

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

3.1 获取数据后配置图标 

3.2 先设置后获取数据 

3.3 loading 动画


1.事件与行为

在 Apache ECharts 的图表中用户的操作将会触发相应的事件。开发者可以监听这些事件,然后通过回调函数做相应的处理,比如跳转到一个地址,或者弹出对话框,或者做数据下钻等等

1.1 绑定一个事件 

如下是一个绑定点击操作的示例:

myChart.on('click', function(params) {
  // 控制台打印数据的名称
  console.log(params.name);
});

 ECharts 支持常规的鼠标事件类型,包括:click | mousedown | mousemove | mouseup | mouseover | mouseout | globalout | contextmenu 事件。下面是一个点击饼图后打开相应的页面:

// 处理点击事件并且跳转到相应的百度搜索页面
myChart.on('click', function(params) {
  window.open('https://www.baidu.com/s?wd=' + encodeURIComponent(params.name));
});

 

1.2 事件的回调函数 

你可以在回调函数中获得这个对象中的数据名、系列名称后在自己的数据仓库中索引得到其它的信息后更新图表,显示浮层等等,如下示例代码: 

myChart.on('click', function(parmas) {
  $.get('detail?q=' + params.name, function(detail) {
    myChart.setOption({
      series: [
        {
          name: 'pie',
          // 通过饼图表现单个柱子中的数据分布
          data: [detail.data]
        }
      ]
    });
  });
});

 在 ECharts 中基本上所有的组件交互行为都会触发相应的事件,常用的事件和事件对应参数在 events 文档中有列出。

下面是监听一个图例开关的示例:

// 图例开关的行为只会触发 legendselectchanged 事件
myChart.on('legendselectchanged', function(params) {
  // 获取点击图例的选中状态
  var isSelected = params.selected[params.name];
  // 在控制台中打印
  console.log((isSelected ? '选中了' : '取消选中了') + '图例' + params.name);
  // 打印所有图例的状态
  console.log(params.selected);
});

 在 ECharts 通过调用 myChart.dispatchAction({ type: '' }) 触发图表行为,统一管理了所有动作,下面示例演示了如何通过 dispatchAction 去轮流高亮饼图的每个扇形。

option = {
  title: {
    text: '饼图程序调用高亮示例',
    left: 'center'
  },
  tooltip: {
    trigger: 'item',
    formatter: '{a} <br/>{b} : {c} ({d}%)'
  },
  legend: {
    orient: 'vertical',
    left: 'left',
    data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎']
  },
  series: [
    {
      name: '访问来源',
      type: 'pie',
      radius: '55%',
      center: ['50%', '60%'],
      data: [
        { value: 335, name: '直接访问' },
        { value: 310, name: '邮件营销' },
        { value: 234, name: '联盟广告' },
        { value: 135, name: '视频广告' },
        { value: 1548, name: '搜索引擎' }
      ],
      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)'
        }
      }
    }
  ]
};

let currentIndex = -1;

setInterval(function() {
  var dataLen = option.series[0].data.length;
  // 取消之前高亮的图形
  myChart.dispatchAction({
    type: 'downplay',
    seriesIndex: 0,
    dataIndex: currentIndex
  });
  currentIndex = (currentIndex + 1) % dataLen;
  // 高亮当前图形
  myChart.dispatchAction({
    type: 'highlight',
    seriesIndex: 0,
    dataIndex: currentIndex
  });
  // 显示 tooltip
  myChart.dispatchAction({
    type: 'showTip',
    seriesIndex: 0,
    dataIndex: currentIndex
  });
}, 1000);
1.3 图标空白事件 

 实现监听空白处的事件:

myChart.getZr().on('click', function(event) {
  // 没有 target 意味着鼠标/指针不在任何一个图形元素上,它是从“空白处”触发的。
  if (!event.target) {
    // 点击在了空白处,做些什么。
  }
});

 2.服务端渲染

2.1 服务端 SVG 渲染
// 服务端代码
const echarts = require('echarts');

// 在 SSR 模式下第一个参数不需要再传入 DOM 对象
let chart = echarts.init(null, null, {
  renderer: 'svg', // 必须使用 SVG 模式
  ssr: true, // 开启 SSR
  width: 400, // 需要指明高和宽
  height: 300
});

// 像正常使用一样 setOption
chart.setOption({
  //...
});

// 输出字符串
const svgStr = chart.renderToSVGString();

// 如果不再需要图表,调用 dispose 以释放内存
chart.dispose();
chart = null;

 在浏览器中我们在setOption完之后 ECharts 就会自动进行渲染将结果绘制到页面中,后续也会在每一帧判断是否有动画需要进行重绘。Node.js 中我们在设置了ssr: true后则没有这个过程。取而代之我们使用了renderToSVGString,将当前的图表渲染到 SVG 字符串,进一步得再通过 HTTP Response 返回给前端或者缓存到本地

HTTP Response 返回给前端(这里以 Express.js为例):

Express基于Node.js基础知识【1】全面总结 推荐收藏_express.js 教程-CSDN博客

res.writeHead(200, {
  'Content-Type': 'application/xml'
});
res.write(svgStr); // svgStr 是上面 chart.renderToSVGString() 得到的字符串
res.end();

或者保存到本地:

fs.writeFile('bar.svg', svgStr, 'utf-8');

如果你不希望有这个动画效果,可以在setOption的时候通过animation: false关闭动画。

setOption({
  animation: false
});

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

3.1 获取数据后配置图标 

在图表初始化后不管任何时候只要通过 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
      }
    ]
  });
});
3.2 先设置后获取数据 

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

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.3 loading 动画

如果数据加载时间较长,一个空的坐标轴放在画布上也会让用户觉得是不是产生 bug 了,因此需要一个 loading 的动画来提示用户数据正在加载

myChart.showLoading();
$.get('data.json').done(function (data) {
    myChart.hideLoading();
    myChart.setOption(...);
});

 关于echarts的常用基础知识,如何绑定点击事件以及回调函数,图表空白事件、服务端如何渲染、异步数据如何加载等基础知识回顾完了,echarts丰富的图标以及功能远不止这些,其他关于echarts的知识请参考官网:Documentation - Apache ECharts


关于echarts的安装下载以及如何在项目中使用,echarts的常用的图标类型以及基本配置基础知识请参考:ECharts 数据可视化 入门基本知识 下载安装常用的图表 【1】-CSDN博客

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

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

相关文章

计数排序以及排序总结

技数排序 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。 思路&#xff1a; 统计相同元素出现次数根据统计的结果将序列回收到原来的序列中 void CountSort(int* arr, int n) {//寻找最大、最小值int maxarr[0], min arr[0];for (int i 0; i < n;…

【网络】私有IP和公网IP的转换——NAT技术

目录 引言 NAT工作机制​编辑 NAT技术的优缺点 优点 缺点 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 公网被子网掩码划分为层状结构&#xff0c;一个公网IP的机器又可以用很多私有IP搭建内网。在日常生活场景中用的都是私有IP&#xff0c;例如手机&#xff0c;…

单元训练05:独立按键的基本操作

可以正常运行的&#xff1a; #include "stc15f2k60s2.h"#define LED(x) \{ \P0 x; \P2 P2 & 0x1f | 0x80; \P2 & 0x1f; \}void Timer0_Init(void) // 1毫秒12.000MHz {AUXR | 0x80; …

spring boot 发送微信小程序订阅消息

首先我们需要订阅一个消息&#xff1a; 订阅教程本文章并未提起&#xff0c;感兴趣的同学自行百度。 我们可以看到订阅消息中【消息内容】有很多参数&#xff0c;我们在发送消息时就需要将这些参数进行填充&#xff0c;当然填充的时候要注意格式&#xff0c;如果格式不对还是会…

python字符串方法,格式化字符串format,字符串的编码和解码,字符串的拼接

字符串–不可变序列 1.字符串方法 2.格式化字符串format&#xff0c;通过格式化字符串解决不同数据类型链接时候报错的问题例如用连接字符串和int就会报错 ①占位符需要注意格式print ( ’ 结果:%s %d ’ % (user_inp,ans))&#xff0c;注意需要给输出语句“”,后边需要有%。…

HarmonyOS应用开发者高级认证(一)

1、依次点击A、B、C、D四个按钮&#xff0c;其中不会触发UI刷新的是&#xff1a; 答案&#xff1a; Button("C").onClick(() > {this.nameList[0].name "Jim"})分析&#xff1a;直接更新非一级数据不会触发UI刷新 2、如果要实现Row组件内的子元素均匀…

wish怎么提升店铺流量?自养号测评防关联技术全解析

在电商领域&#xff0c;Wish作为一家知名的跨境电商平台&#xff0c;店铺流量的提升对于商家来说至关重要&#xff0c;如若店铺流量不够的话排名也会比较靠后&#xff0c;这时候卖家就需要做好相关运营政策去提升流量。 一、Wish怎么提升店铺流量&#xff1f; 1、优化商品信息…

C语言——结构体、共用体、枚举、位运算

C语言——结构体、共用体、枚举、位运算 结构体共用体枚举位运算 结构体 如果将复杂的复杂的数据类型组织成一个组合项&#xff0c;在一个组合项中包含若干个类型不同&#xff08;当然也可以相同&#xff09;的数据项。 C语言允许用户自己指定这样一种数据结构&#xff0c;它称…

Sentinel 滑动时间窗口源码分析

前言&#xff1a; Sentinel 的一个重要功能就是限流&#xff0c;对于限流来说有多种的限流算法&#xff0c;比如滑动时间窗口算法、漏桶算法、令牌桶算法等&#xff0c;Sentinel 对这几种算法都有具体的实现&#xff0c;如果我们对某一个资源设置了一个流控规则&#xff0c;并…

【upload]-ini-[SUCTF 2019]CheckIn-笔记

上传图片木马文件后看到&#xff0c;检查的文件内容&#xff0c;包含<? 一句话木马提示 检查的文件格式 用如下图片木马&#xff0c;加上GIF89a绕过图片和<?检查 GIF89a <script languagephp>eval($_POST[cmd])</script> .user.ini实际上就是一个可以由用…

交换机VLAN配置中Tagged与Untagged端口的差异和应用区别

VLAN&#xff08;虚拟局域网&#xff09;是一种将局域网设备从逻辑上划分为不同虚拟工作组的技术。它打破了传统局域网在物理位置上的限制&#xff0c;允许网络管理员根据功能、部门或安全需求等因素&#xff0c;将同一物理网络中的设备划分到不同的逻辑网络中。每个VLAN都像一…

使用Copilot辅助编程:我如何减少加班并提高工作效率

当我聘用了一个高级工程师给我写代码&#xff0c;我再也不加班了&#xff01; 很多医生朋友说写代码很难&#xff0c;学不会python。在这个AI时代&#xff0c;作为智慧的顶尖人类&#xff0c;你还在百度搜代码真的是out了。 学会站在巨人的肩膀上&#xff0c;让AI替你搬砖&am…

工业互联网边缘计算实训室解决方案

一、引言 随着物联网&#xff08;IoT&#xff09;、5G通信技术的快速发展&#xff0c;工业互联网已成为推动制造业转型升级的重要力量。边缘计算作为云计算的延伸和补充&#xff0c;在实时数据分析、降低数据传输延迟、提升处理效率及增强数据安全性方面展现出巨大潜力。在此背…

C语言——查漏补缺

前言 本篇博客主要记录一些C语言的遗漏点&#xff0c;完成查漏补缺的工作&#xff0c;如果读者感兴趣&#xff0c;可以看看下面的内容。都是一些小点&#xff0c;下面进入正文部分。 1. 字符汇聚 编写代码&#xff0c;演示多个字符从两端移动&#xff0c;向中间汇聚 #inclu…

无人机可以用来追黄蜂吗?

哈哈&#xff0c;这个问题真是挺有趣的&#xff01;不过&#xff0c;从实际应用和安全性角度来考虑&#xff0c;使用无人机来追黄蜂可能并不是一个好主意。 首先&#xff0c;黄蜂通常对突然出现的移动物体非常敏感&#xff0c;尤其是像无人机这样的“不明飞行物”。如果无人机…

【网站项目】SpringBoot679牙科诊所管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Qt 窗口:对话框详解

目录 对话框 1. 对话框的基本概念 2. 对话框的内存释放问题 3. 自定义对话框界面 3.1 使用纯代码的方式定义 3.2 使用图形化的方式定义 4. 对话框的分类 4.1 模态对话框 4.2 非模态对话框 4.3 混合属性对话框 5. Qt 内置对话框 5.1 消息对话框 QMessageBox 示例1&…

生活生鲜超市小程序系统开发方案

生活生鲜超市小程序系统是集商品浏览、在线下单、支付结算、物流配送、会员管理等功能于一体。是为了满足现代消费者对新鲜食品购买的便利性与即时性需求。 适用于&#xff1a;生鲜超市、百货、连锁、水果、批发、便民、果蔬、食品、食材、鲜果、特产、海鲜等店铺。一、目标用户…

IP基础知识以及IP地址分类(A类 B类 C类 D类 E类)

IP地址是什么&#xff1f; IP 地址是互联网协议特有的一种地址&#xff0c;它是 IP 协议提供的一种统一的地址格式&#xff0c;为互联网上的每一个网络和每一台主机分配一个逻辑地址&#xff0c;以此来屏蔽物理地址的差异。 MAC和IP 在⽹络数据包传输中&#xff0c;源IP地址…

蜂鸣器(51单片机)

一、蜂鸣器介绍 1.蜂鸣器 2.蜂鸣器电路 3.芯片图示 二、蜂鸣器功能实现 1.蜂鸣器提示音代码 蜂鸣器函数 播放提示音功能实现 2.蜂鸣器播放音乐