前端实战:ECharts实现饼图选中区域跳转

2024-07-29 10:45:01 浏览数 (1)

今天给大家分享ECharts实现饼图选中区域跳转,首先先介绍一下Echarts。

1. ECharts介绍

ECharts是百度开源的一个基于JavaScript的可视化图表库,提供了直观、生动、可交互、可高度定制化的数据可视化图表展现能力,支持直线图、K线图、散点图、饼图、地图等多种图表类型。ECharts使得复杂的数据可视化变得简单易行,可广泛应用于各类数据展现领域,如BI、舆情分析、数据报表等。

2、ECharts优势介绍

● ECharts是一个强大的可视化图表库,具有以下优点:全面的图表类型支持:ECharts支持多种类型的图表,包括折线图、柱状图、饼图、散点图等,可以满足用户在数据可视化中的多种需求。

● 易于使用和定制:ECharts采用JavaScript编写,具有良好的文档和开发体验,并且有丰富的API可以用来自定义样式和行为。

● 可扩展性强:ECharts的内部结构非常灵活,可以通过插件和扩展来增加新的功能和定制化需求。

● 兼容性良好:ECharts能够在不同的浏览器和移动设备上良好地工作,并且支持多语言和多平台。

● 高性能:ECharts采用了现代化的渲染技术,能够应对高密度和大数据量的可视化需求,并呈现出良好的性能和效果。

3、ECharts事件绑定

ECharts图表可以通过on方法来监听用户对图表的行为,并且可以拿到操作的item参数进行业务逻辑处理比如(页面跳转、业务计算、提醒等)。

● 用户鼠标操作点击: 'click'、'dblclick'、'mousedown'、'mousemove'、'mouseup'、'mouseover'、'mouseout'、'globalout'、'contextmenu' 事件。

● 用户在使用可以交互的组件后触发的行为事件:在切换图例开关时触发的 'legendselectchanged' 事件),数据区域缩放时触发的 'datazoom' 事件等。示例如下:

代码语言:javascript复制
myChart.on('click', function (params) {
    // 在用户点击后控制台打印数据的名称
    console.log(params);
});

myChart.on('legendselectchanged', function (params) {
    console.log(params);
});

4、 完整代码示例

代码复制后可以直接运行。

代码语言:javascript复制
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>echart饼图实战</title>
	</head>
	<body>		
		<div style="width:800px; border:2px solid blue">
			<!-- 设定图表的div -->
			<div id="main" style="height:400px"></div>
			<span id="hover-console" style="color:#1e90ff"></span>
		</div>
		<script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/2.2.7/echarts-all.js"></script>
		<script type="text/javascript">
			var  nowColor="";
			     // 初始化echarts图表
			     var myChart = echarts.init(document.getElementById('main'));
			     option = {   
			     title : {
			      text: '技术博客市场占有率',
			      subtext: '测试数据',
			      x:'center'
			     },
				 // 设置提示框参数
			     tooltip : {
			      trigger: 'item',
			      formatter: "{a} <br/>{b} : {c} ({d}%)"
			     },
				 // 设置图例参数
			     legend: {
			      orient : 'vertical',
			      x : 'left',
			      data:['CSDN','博客园','51CTO','掘金','简书']
			     },
				 // 工具栏组件配置
			     toolbox: {
			      show : true,
			      feature : {
			       saveAsImage : {show: true}
			      }
			     },
			     calculable : false,   //是否支持拖拽
			     series : [
			      {
			       name:'访问来源',
			       type:'pie',     //图表类型 pie 表示饼图
			       radius : '55%',
			       center: ['50%', '60%'],			     
			       data:[
			        {
			              value:1500,
			              name:'CSDN',
			              itemStyle: {
			                emphasis: {color: '#333'}   
      //emphasis 用来配置鼠标移上去 区块的颜色
			              }
			            },
			            {
			              value:1300,
			              name:'博客园',
			              itemStyle: {
			                emphasis: {color: '#666'}
			              }
			            },
			            {
			              value:750,
			              name:'51CTO',
			              itemStyle: {
			                emphasis: {color: '#999'}
			              }
			            },
			            {
			              value:390,
			              name:'掘金',
			              itemStyle: {
			                emphasis: {color: '#ggg'}
			              }
			            },
						  {
			              value:960,
			              name:'简书',
			              itemStyle: {
			                emphasis: {color: '#777'}
			              }
			            },
			       ]
			      }
			     ]
			    };			         
			    //为echarts对象加载配置项 
			    myChart.setOption(option); 			     
			    // url 数组顺序 ,可以拼接参数 注意顺序要和后台服务获取的顺序保持一致
			    var data_url=['https://blog.csdn.net/','https://www.cnblogs.com/','https://blog.51cto.com/','https://juejin.cn/','https://www.jianshu.com/']; 
			 
			     function urlGoToClick(param,i,txt,url){  
				 // 这里可以对url进行参数拼接,根据实际的业务需要	
			     if(param.seriesIndex==0&&param.dataIndex==i){	
window.open (url,'_blank','');
			        } 
			     }		    
			  	//增加监听事件
			  function echartListen(param) {
			       
			    if (typeof param.seriesIndex != 'undefined') {
			   
			    if (param.type == 'click') {     
			   var peiLenght= option.legend.data.length;			 
			    for(var i=0;i<peiLenght;i  ){
			     urlGoToClick(param,i,option.legend.data[i],data_url[i])
			     }  
			    }else{			      
			        document.getElementById('hover-console').innerHTML = '事件选中的饼图区域是 : '   param.dataIndex;			  
			     }			          
			    }
			}
			// 给图表设置点击、鼠标覆盖等事件
			myChart.on("click", echartListen);
			myChart.on("hover", echartListen);
		</script>
	</body>
</html>

5、 工具栏组件参数详解

参考官方文档

代码语言:javascript复制
toolbox={
    show : true, //是否显示工具栏组件
    orient:"horizontal", //工具栏 icon 的布局朝向'horizontal' 'vertical'
    itemSize:15,  //工具栏 icon 的大小
    itemGap:10, //工具栏 icon 每项之间的间隔
    showTitle:true,  //是否在鼠标 hover 的时候显示每个工具 icon 的标题
    feature : {
        mark : {  // '辅助线开关'
            show: true
        },
        dataView : { 
            //数据视图工具,可以展现当前图表所用的数据,编辑后可以动态更新
            show: true, //是否显示该工具。
            title:"数据视图",
            readOnly: false, //是否不可编辑(只读)
            lang: ['数据视图', '关闭', '刷新'], 
             //数据视图上有三个话术,默认是['数据视图', '关闭', '刷新']
            backgroundColor:"#fff",  //数据视图浮层背景色。
            textareaColor:"#fff",//数据视图浮层文本输入区背景色
            textareaBorderColor:"#333",
             //数据视图浮层文本输入区边框颜色
            textColor:"#000", //文本颜色。
            buttonColor:"#c23531", //按钮颜色。
            buttonTextColor:"#fff", //按钮文本颜色。
        },
        magicType: { 
		//动态类型切换
            show: true,
            title:"切换",//各个类型的标题文本,可以分别配置。
            type: ['line', 'bar'], 
            //启用的动态类型,包括'line'(切换为折线图), 'bar'(切换为柱状图), 'stack'(切换为堆叠模式), 'tiled'(切换为平铺模式)
        },
        restore : {//配置项还原。
            show: true,//是否显示该工具。
            title:"还原",
        },
        saveAsImage : { //保存为图片。
            show: true, //是否显示该工具。
            type:"png", //保存的图片格式。支持 'png' 和 'jpeg'。
            name:"pic1",//保存的文件名称,默认使用 title.text 作为名称
            backgroundColor:"#ffffff", 
            //保存的图片背景色,默认backgroundColor,不存在的话为白色
            title:"保存为图片",
            pixelRatio:1 
            //保存图片的分辨率比例,默认跟容器相同大小,可以设置为大于1的值
        },
        dataZoom :{ //数据区域缩放。目前只支持直角坐标系的缩放
            show: true, //是否显示该工具。
            title:"缩放", //缩放和还原的标题文本
            xAxisIndex:0, 
            //指定哪些 xAxis 被控制。如果缺省则控制所有的x轴。如果设置为 false 则不控制任何x轴。如果设置成 3 则控制 axisIndex 为 3 的x轴。如果设置为 [0, 3] 则控制 axisIndex 为 0 和 3 的x轴
            yAxisIndex:false, 
            //指定哪些 yAxis 被控制。如果缺省则控制所有的y轴。如果设置为 false 则不控制任何y轴。如果设置成 3 则控制 axisIndex 为 3 的y轴。如果设置为 [0, 3] 则控制 axisIndex 为 0 和 3 的y轴
        },
    },
    zlevel:0, 
    //所属图形的Canvas分层,zlevel 大的 Canvas 会放在 zlevel 小的 Canvas 的上面
    z:2, //所属组件的z分层,z值小的图形会被z值大的图形覆盖
    left:"center",//组件离容器左侧的距离,'left', 'center', 'right','20%'
    top:"top",  //组件离容器上侧的距离,'top', 'middle', 'bottom','20%'
    right:"auto",//组件离容器右侧的距离,'20%'
    bottom:"auto",//组件离容器下侧的距离,'20%'
    width:"auto", //图例宽度
    height:"auto", //图例高度
}

0 人点赞