写两个ECharts联动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写两个ECharts联动相关的知识,希望对你有一定的参考价值。
参考技术A 这篇文章,超人鸭写两个echarts的饼图,并带有联动的效果。上次超人鸭写过一篇写echarts柱状图的,每个配置项基本都介绍了,有兴趣的伙伴可以去看看哦。文章地址: 写个ECharts,带详细配置项解释先看看这篇文章要做的东西,上图:
最重要的就是最下面的点击事件,这个echarts提供的api,点击某一条数据,参数params就是那一条数据的各个配置,超人鸭传了一个 params.name就是上面series定义的data里面的name。就是‘电动、汽油...’这些
在方法的开始拿到要展示的数据,然后下面的echarts基本与左边的饼图一样,有点不同的就是在series中添加roseType: 'radius'这个配置,把饼图变成南丁格尔图:
到这里超人鸭就完成了两个饼图之间的联动,这种需求也是非常常见的,有什么不足之处,希望大家多多指教哦。
ECharts 报表事件联动系列三:柱状图,饼状图实现联动
源码如下:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ECharts</title> <script src="http://echarts.baidu.com/dist/echarts.min.js"></script> </head> <body> <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="bar" style="width: 600px;height:400px;"></div> <div id="pie" style="width: 600px;height:400px;"></div> </body> <script type="text/javascript"> // 基于准备好的dom,初始化echarts实例 var myBarChart = echarts.init(document.getElementById(\'bar\')); var n1 = Math.floor(Math.random()*500+1); var n2 = Math.floor(Math.random()*500+1); var n3 = Math.floor(Math.random()*500+1); var n4 = Math.floor(Math.random()*500+1); var n5 = Math.floor(Math.random()*500+1); var n6 = Math.floor(Math.random()*500+1); // 指定图表的配置项和数据 var option = { title: { text: \'ECharts 入门示例\' }, tooltip: { triggerEvent:true}, legend: { data:[\'销量\',"趋势"] }, xAxis: { data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"], triggerEvent:true, //可以点击x轴坐标, axisTick: { alignWithLabel: true //坐标值是否在刻度中间 } }, yAxis: { type: \'value\', splitArea: { show: true }, //百分比显示Y轴 axisLabel: { show: true, interval: \'auto\' }, show: true, triggerEvent:true //可以点击y轴坐标 }, series: [{ name: \'销量\', type: \'bar\', data: [n1, n2, n3, n4, n5, n6], itemStyle: { normal: { label: { show: true, position: \'top\' } } } },{ name: \'趋势\', type: \'line\', data: [n1, n2, n3, n4, n5, n6], smooth:false, //是否为曲线,默认为false itemStyle:{ normal:{ lineStyle:{ width:1, // 虚线的宽度 type:\'dotted\' //\'dotted\'虚线 \'solid\'实线 } } } }] }; // 使用刚指定的配置项和数据显示图表。 myBarChart.setOption(option); //方法1:https://zhuanlan.zhihu.com/p/33050579 // var ids = [55,66,85,86,55,544,5,6,8,4,88,89]; //这样就可以获取到点击柱子或者文本标签对应的id了 // myBarChart.on(\'click\', function (params) { // if(params.componentType =="xAxis"){ // alert("单击了"+params.value+"x轴标签, 你点击的是第"+(Number(params.event.target.anid.split("_")[1])+1)+"个X标签;当前对应的id为:"+ids[params.event.target.anid.split("_")[1]]); // }else{ // alert("单击了"+params.name+"柱状图, 你点击的是第"+(params.dataIndex+1)+"个柱状图;当前对应的id为:"+ids[params.dataIndex]); //数组下标是从0开始的哦,图也是从0开始的 // } // }); //方法二:https://blog.csdn.net/sophia_xiaoma/article/details/78055947 myBarChart.on(\'click\', function (params) { // 当componentType == "xAxis"或者 ==“yAxisx”时,取被点击时坐标轴的值params.value alert("单击了"+params.componentType+"x轴标签"+params.value); if(params.componentType == "xAxis"){ alert("单击了"+params.value+"x轴标签"+params.name); }else{ alert("单击了"+params.name+"柱状图"+params.value); } }); //方法三:http://www.jb51.net/article/125820.htm // myBarChart.on("click", barConsole); // function barConsole(param) { // // 获取data长度 // // alert(option.series[0].data.length); // // 获取地N个data的值 // alert(option.series[0].data[i]); // // 获取series中param.dataIndex事件对应的值 // // alert(option.series[param.seriesIndex].data[param.dataIndex]); // // alert(param.value); //与上一行等价 // // 获取xAxis当前点击事件索引对应的值,可以用作传参了 // // alert(option.xAxis.data[param.dataIndex]); // //param.dataIndex 获取当前点击索引, // // alert(param.dataIndex); // // 当前点击事件位于series中的索引 // // alert(param.seriesIndex); // // clickFunc(param.dataIndex);//执行点击效果 // //param具体包含的参数见 https://blog.csdn.net/allenjay11/article/details/76033232 // //刷新页面 // // location.reload(); // // window.location.reload(); // refresh(); // } //方法四:饼图添加事件示例 https://www.cnblogs.com/zhzhair-coding/p/6953982.html?utm_source=itdadao&utm_medium=referral </script> <script type="text/javascript"> // 基于准备好的dom,初始化echarts实例 var myPieChart = echarts.init(document.getElementById(\'pie\')); var n1 = Math.floor(Math.random()*500+1); var n2 = Math.floor(Math.random()*500+1); var n3 = Math.floor(Math.random()*500+1); var n4 = Math.floor(Math.random()*500+1); var n5 = Math.floor(Math.random()*500+1); // 指定图表的配置项和数据 var option = { "legend":{ "orient":"vertical", "left":"left" }, "series":[ { "data":[ { "name":"直接访问", "value":n1 }, { "name":"邮件营销", "value":n2 }, { "name":"联盟广告", "value":n3 }, { "name":"视频广告", "value":n4 }, { "name":"搜索引擎", "value":n5 } ], "center":[ "50%", "60%" ], "name":"访问来源", "itemStyle":{ "normal":{ "label":{ "formatter":"{b}\\n{c}\\n{d}%", "show":true } }, "emphasis":{ "shadowOffsetX":0, "shadowBlur":10, "shadowColor":"rgba(0, 0, 0, 0.5)" } }, "radius":"55%", "type":"pie" } ], "tooltip":{ "formatter":"{a} <br/>{b} : {c} ({d}%)", "trigger":"item" }, "title":{ "subtext":"纯属虚构", "x":"center", "text":"某站点用户访问来源" } }; // 使用刚指定的配置项和数据显示图表。 myPieChart.setOption(option); myPieChart.on("click", pieConsole); //方法三:http://www.jb51.net/article/125820.htm function pieConsole(param) { // 获取data长度 alert(option.series[0].data.length); // 获取地N个data的值 // alert(option.series[0].data[i]); // 获取series中param.dataIndex事件对应的值 alert(param.value); alert(param.name); alert(option.series[param.seriesIndex].data[param.dataIndex].value); alert(option.series[param.seriesIndex].data[param.dataIndex].name)以上是关于写两个ECharts联动的主要内容,如果未能解决你的问题,请参考以下文章