Echarts可视化教程(十四)—— Echarts中的事件和行为

第1关: Echarts中的事件和行为

700

  • 任务要求
  • 参考答案
  • 评论
  • 关卡排行榜

任务描述

本关任务:按照要求处理鼠标事件。

相关知识

Echarts是网页端的组件,会继承一些网页上的概念,比如事件和行为,这些概念最开始来源于Dom

事件指的是用户或者浏览器自身执行的某种动作,比如使用鼠标点击页面、按下键盘的某个按键、网页加载等。当这些事件发生时,需要有函数来进行处理,这些函数被称为事件处理程序。比如用户点击重置按钮时,需要将页面上的所有输入框清空,这个就是一个事件处理程序。

Echarts中的事件处理分为两大类:鼠标事件的处理、组件交互的行为事件处理。

鼠标事件的处理

鼠标事件指的是用户使用鼠标时发生的事件,包括单击鼠标、双击鼠标等,如下是鼠标事件的一个汇总:

事件名称含义
click单击鼠标左键
dblclick双击鼠标左键
mouseup鼠标释放
mousedown鼠标按下
mouseover鼠标移入目标元素上方时触发
mousemove鼠标在目标元素内部移动时不断触发
mouseout鼠标移出目标元素时触发
globalout鼠标移出整个图表时触发
contextmenu单击鼠标右键

其中,click是最常见的鼠标事件。

鼠标事件的处理程序有一个入参params,这是一个字典类型的变量,它的各个属性的名字和含义如下所示:

属性名称属性的含义
componentType当前点击的图形元素所属的组件的名称,比如series、markLine等
seriesType系列的类型,比如line、bar等,只有当componentType值为series时才有意义
seriesIndex系列在传入的serise中的索引
seriesName系列的名字
name数据名、类目名
dataIndex数据在传入的data数组中的index
data传入的原始数据项
dataTypesankey、graph等图表同时含有nodeData和edgeData两种data,dataType的值会是'node'或者'edge',其它大部分图表的dataType的值都是'node'
value传入的数据值
color数据图形的颜色,只有当componentType值为series时才有意义

这里的含义不太好理解,我们来看一个例子,在这个例子中把所有的属性全部打印出来:

 
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>ECharts</title>
  6. <!-- 引入 echarts.js -->
  7. <script type="text/JavaScript" src="../static/echarts.min.js"></script>
  8. <body>
  9. <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
  10. <div id="main" style="width: 600px;height:400px;"></div>
  11. <script type="text/javascript">
  12. //基于准备好的dom,初始化ECharts图表
  13. var myChart = echarts.init(document.getElementById("main"));
  14. var option = { //指定图表的配置项和数据
  15. color: ['LimeGreen', 'DarkGreen', 'red', 'blue', 'Purple'],
  16. title: { text: '产品销量产量利润统计', left: 10, top: 9 },
  17. xAxis: { //配置x轴坐标系
  18. data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
  19. },
  20. yAxis: {}, //配置y轴坐标系
  21. legend: {},
  22. series: [ //配置数据系列
  23. { //设置数据系列1:销量
  24. name: '销量', type: 'bar',
  25. data: [5, 28, 16, 20, 15, 33]
  26. },
  27. { //设置数据系列2:产量
  28. name: '产量', type: 'bar',
  29. data: [15, 38, 20, 24, 20, 45]
  30. },
  31. { //设置数据系列3:利润
  32. name: '利润', type: 'bar',
  33. data: [25, 15, 10, 10, 15, 22]
  34. }
  35. ]
  36. };
  37. myChart.setOption(option); //使用刚指定的配置项和数据显示图表
  38. window.addEventListener("resize", function () {
  39. myChart.resize(); //使图表自适应窗口的大小
  40. });
  41. //回调函数处理鼠标点击事件并且显示各数据信息内容
  42. myChart.on('click', function (params) {
  43. alert("第" + (params.dataIndex + 1) + "件产品:" + params.name + "的" +
  44. params.seriesName + "为:" + params.value +
  45. "\n\n componentType: " + params.componentType +
  46. "\n seriesType: " + params.seriesType +
  47. "\n seriesIndex: " + params.seriesIndex +
  48. "\n seriesName: " + params.seriesName +
  49. "\n name: " + params.name +
  50. "\n dataIndex: " + params.dataIndex +
  51. "\n data: " + params.datax +
  52. "\n dataType: " + params.dataType +
  53. "\n value: " + params.value +
  54. "\n color: " + params.color);
  55. });
  56. myChart.setOption(option); //为echarts对象加载数据
  57. </script>
  58. </body>
  59. </html>

我们先来看一下效果,再来分析程序,点击“羊毛衫”的利润,弹出的框如下所示(如果看不清,请点击图片):

图  1


图 1 鼠标事件

4255行是一个匿名函数,即鼠标事件处理程序,在这个程序里,打印了入参params的每一个属性:

  • seriesTypebar表示点击的是一个柱状图;
  • seriesIndex2表示点击的是“羊毛衫”的第三个柱子(因为索引是从0开始的);
  • seriesName表示柱子的名字;
  • name表示数据的名字,即x轴上的名字;
  • dataIndex值为1表示点击的是第二个系列,第一个是“衬衫”;
  • value表示这个柱子实际的值。

除了param参数之外,我们还可以直接操作option参数,如下:

 
  1. myChart.on('click', function (params) {
  2. option.series[0].data[0] = 10
  3. //重新设置option
  4. myChart.setOption(option)
  5. });
组件交互的行为事件

除了鼠标事件,Echarts中还有一些已经提前定义好触发动作的事件,比如鼠标点击图例的事件为legendselectchanged事件,我们把这些事件称为组件交互事件,已知的组件交互事件如下所示:

事件名称含义
legendselectchanged切换图例选中状态后的事件 (注:图例组件用户切换图例开关会触发该事件,不管你有没有选择,点击了就触发)
legendselected图例选中后的事件,即点击显示该图例时,触发就生效。
legendunselected图例取消选中后的事件。
datazoom数据区域缩放后的事件。缩放视觉映射组件。
datarangeselected视觉映射组件中,range 值改变后触发的事件。
timelinechanged时间轴中的时间点改变后的事件。
timelineplaychanged时间轴中播放状态的切换事件。
restore重置 option 事件。
dataviewchanged工具栏中数据视图的修改事件。
magictypechanged工具栏中动态类型切换的切换事件。
geoselectchangedgeo 中地图区域切换选中状态的事件(用户点击选中会触发该事件。)。
geoselectedgeo 中地图区域选中后的事件(使用dispatchAction可触发此事件,用户点击不会触发此事件(用户点击事件请使用 geoselectchanged))。
geounselectedgeo 中地图区域取消选中后的事件,使用dispatchAction可触发此事件,用户点击不会触发此事件(用户点击事件请使用 geoselectchanged)。
pieselectchangedseries-pie 中饼图扇形切换选中状态的事件,用户点击选中会触发该事件。
pieselectedseries-pie 中饼图扇形选中后的事件,使用dispatchAction可触发此事件,用户点击不会触发此事件(用户点击事件请使用 pieselectchanged)。
pieunselectedseries-pie 中饼图扇形取消选中后的事件,使用dispatchAction可触发此事件,用户点击不会触发此事件(用户点击事件请使用 pieselectchanged)。
mapselectchangedseries-map 中地图区域切换选中状态的事件,用户点击选中会触发该事件。
mapselectedseries-map 中地图区域选中后的事件,使用dispatchAction可触发此事件,用户点击不会触发此事件(用户点击事件请使用 mapselectchanged)。
mapunselectedseries-map 中地图区域取消选中后的事件,使用dispatchAction可触发此事件,用户点击不会触发此事件(用户点击事件请使用 mapselectchanged)。
axisareaselected平行坐标轴 (Parallel) 范围选取事件,当进行坐标轴范围选取时,可以用如下方式获取当前高亮的线所对应的 data indices (即 series 的 data 中的序号列表)。

我们以图例点击事件为例,看下组件交互事件如何使用:

 
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>ECharts</title>
  6. <!-- 引入 echarts.js -->
  7. <script type="text/JavaScript" src="../static/echarts.min.js"></script>
  8. <body>
  9. <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
  10. <div id="main" style="width: 600px;height:400px;"></div>
  11. <script type="text/javascript">
  12. //基于准备好的dom,初始化ECharts图表
  13. var myChart = echarts.init(document.getElementById("main"));
  14. var option = { //指定图表的配置项和数据
  15. color: ['LimeGreen', 'DarkGreen', 'red', 'blue', 'Purple'],
  16. title: { text: '产品销量产量利润统计', left: 10, top: 9 },
  17. xAxis: { //配置x轴坐标系
  18. data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
  19. },
  20. yAxis: {}, //配置y轴坐标系
  21. legend: {},
  22. series: [ //配置数据系列
  23. { //设置数据系列1:销量
  24. name: '销量', type: 'bar',
  25. data: [5, 28, 16, 20, 15, 33]
  26. },
  27. { //设置数据系列2:产量
  28. name: '产量', type: 'bar',
  29. data: [15, 38, 20, 24, 20, 45]
  30. },
  31. { //设置数据系列3:利润
  32. name: '利润', type: 'bar',
  33. data: [25, 15, 10, 10, 15, 22]
  34. }
  35. ]
  36. };
  37. myChart.setOption(option); //使用刚指定的配置项和数据显示图表
  38. window.addEventListener("resize", function () {
  39. myChart.resize(); //使图表自适应窗口的大小
  40. });
  41. myChart.on('legendselectchanged', function (params) {
  42. //获取点击图例的选中状态
  43. var isSelected = params.selected[params.name];
  44. //在控制台中打印
  45. window.alert((isSelected ? '你选中了' : '你取消选中了') + '图例:' + params.name);
  46. });
  47. myChart.setOption(option); //为echarts对象加载数据
  48. </script>
  49. </body>
  50. </html>

这里的程序和第一个例子中的几乎没有区别,除了click参数被改成了legendselectchanged。这个参数表示事件的名字。

当用户点击利润图例时,效果如下:

图  1

 
图 2 图例事件效果图


可以看到,弹框告诉我们:用户点击了利润图例。

当点击了弹框中的“确定”按钮,效果如下:

图  1

 
图 3 利润被隐藏


可以看到,利润被隐藏了。

编程要求

根据提示,在右侧编辑器BeginEnd之间补充代码,当鼠标点击柱状图中的某个一个柱子时,将该柱子的value(即高度)设置为原来的两倍。其它所有配置都不变。

柱状图就是图2中的柱状图。

要点:需要分清楚dataIndexseriesIndexoption中的不同含义。

测试说明

我们将调用浏览器接口,打开你修改的这段代码生成的网页,然后模拟鼠标点击某一个柱子,并截图获取其中的图像,和正确的图像进行对比,从而判断你补充的程序是否正确,正确将输出:“图像对比一致,恭喜通关!”

同时我们将展示你生成的图像和正确的图像,你可以通过观察图像的方式修改自己尚未通过的代码。

测试输入: 预期输出:图像对比一致,恭喜通关!


开始你的任务吧,祝你成功!

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <!-- 引入 echarts.js -->
	<script type="text/JavaScript" src="../static/echarts.min.js"></script>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>

    <script type="text/javascript">
   	    //基于准备好的dom,初始化ECharts图表
		var myChart = echarts.init(document.getElementById("main"));
		var option = {  //指定图表的配置项和数据
			color: ['LimeGreen', 'DarkGreen', 'red', 'blue', 'Purple'],
			title: { text: '产品销量产量利润统计', left: 10, top: 9 },
			xAxis: {  //配置x轴坐标系
				data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
			},
			yAxis: {},  //配置y轴坐标系
			legend: {},
			series: [  //配置数据系列
				{   //设置数据系列1:销量
					name: '销量', type: 'bar',
					data: [5, 28, 16, 20, 15, 33]
				},
				{   //设置数据系列2:产量
					name: '产量', type: 'bar',
					data: [15, 38, 40, 24, 20, 45]
				},
				{   //设置数据系列3:利润
					name: '利润', type: 'bar',
					data: [25, 15, 10, 10, 15, 22]
				}
			]
		};
		myChart.setOption(option);  //使用刚指定的配置项和数据显示图表
		window.addEventListener("resize", function () {
			myChart.resize();  //使图表自适应窗口的大小
		});
		myChart.on('highlight', function (params) {
		    /********* Begin *********/


			/********* End *********/
			myChart.setOption(option)
		});

		myChart.setOption(option);  //为echarts对象加载数据
		var _this = this
		var chartHover = function () {  //创建自定义函数chartHover
			var dataLen = option.series[0].data.length
			_this.myChart.dispatchAction({
				type: 'highlight',  //取消之前高亮的图形
				seriesIndex: 1,
				dataIndex: 2
			})
		}
		//调用chartHover自定义函数,时间间隔为3秒
		chartHover()
    </script>
</body>
</html>

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
网约车大数据综合项目是一个集成了各种数据分析和可视化技术的项目,其数据可视化是其非常重要的一部分。数据可视化通过图表、地图等形式,将大量的数据信息以直观、易懂的方式展现出来,帮助项目团队和决策者更好地理解和利用数据。 Flask是一款轻量级的Python Web框架,ECharts是一个由百度开发的基于JavaScript的数据可视化库,它们可以很好地配合使用来实现数据可视化的需求。在网约车大数据综合项目,我们可以利用Flask框架搭建Web应用程序的后端,通过Python语言处理数据,并结合ECharts库来实现前端数据可视化的功能。 具体来说,我们可以使用Flask来构建Web应用的后台服务器,接收用户的请求,并调用相应的数据处理函数。同时,利用ECharts库提供的丰富图表类型和交互功能,将经过处理的数据转换成直观的图表展示,例如折线图、柱状图、地图等。这样,用户就可以通过浏览器访问我们的Web应用,实时查看和分析网约车的相关数据,包括订单量、车辆分布、用户乘车轨迹等内容。 通过数据可视化flask echarts,我们不仅可以帮助项目团队更好地理解和利用网约车的大数据信息,还可以为决策者提供直观、准确的数据支持,帮助他们制定更科学合理的运营策略和规划。这将有助于提升网约车行业的整体运营效率和用户体验,进而推动行业的可持续发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值