需求:实现柱状图显示各个地方和总和的点击量,升序排列,点击柱图变色
1 <template> 2 <div> 3 <div ref="mycharts" class="mydiv"></div> 4 </div> 5 </template> 6 7 <script> 8 import axios from 'axios'; 9 import * as echarts from 'echarts'; 10 11 const yData=[ 12 "武汉", 13 "南京", 14 "南宁", 15 "总和" 16 ]; 17 18 export default { 19 20 data() { 21 return { 22 // yData可以从后台获取 23 yData, 24 selectId:-1, 25 col:['#c1232b','#b5c334','#fcce10','#e87c25'], 26 data:[17,33,12,62], 27 emphaColor:'' 28 }; 29 }, 30 created(){ 31 32 }, 33 mounted(){ 34 this.getEcharts(); 35 }, 36 methods:{ 37 38 getEcharts(){ 39 // 初始化echarts实例 40 let myCharts=echarts.init(this.$refs.mycharts) 41 //需要在下方内部函数或者回调函数的外部改变this指向问题 42 let _this=this 43 let option = { 44 xAxis:{ 45 type: 'value', 46 splitLine:{ 47 show:false 48 } 49 }, 50 yAxis: { 51 type: 'category', 52 data: this.yData, 53 //Y轴对应的数据升序排列 54 inverse:true, 55 // name:'场点', 56 axisTick:{ 57 show:false 58 }, 59 axisLine:{ 60 show:false 61 }, 62 axisLabel:{ 63 fontSize:20 64 } 65 }, 66 legend:{ 67 //与series中的name属性的值一一对应 68 data:["点击量"], 69 textStyle:{ 70 fontSize:30 71 }, 72 itemStyle:{ 73 color:'#DAA520' 74 } 75 }, 76 series: [ 77 { 78 realtimeSort:true,//是否开启序列的实时排序,排序让数值和对应标签一一对应 79 // seriesLayoutBy:"column", 80 name:"点击量", 81 type: 'bar', 82 //this.data可从后台获取 83 data: this.data, 84 label:{ 85 show:true, 86 position:'right' 87 }, 88 barWidth:50, 89 itemStyle:{ 90 normal:{ 91 color:function(parmars){ 92 // console.log("this:",this); 93 // console.log("_this:",_this); 94 if(_this.selectId===-1){ 95 return '#DAA520' 96 } 97 if(parmars.dataIndex===_this.selectId){ 98 return '#FFD700'; 99 } 100 return '#DCDCDC'; 101 102 } 103 } 104 }, 105 emphasis:{ 106 itemStyle:{ 107 color:'#FFD700' 108 } 109 } 110 } 111 ] 112 }; 113 //使用配置项option显示图表 114 myCharts.setOption(option); 115 myCharts.on('click',function(parmars){ 116 if(_this.selectId!=parmars.dataIndex){ 117 // console.log(this); 118 //在函数的函数内部关于this的指向问题,在这里应该使用_this,若使用this则获取不到data中定义的数据 119 _this.selectId=parmars.dataIndex; 120 }else{ 121 _this.selectId=-1; 122 } 123 myCharts.setOption(option); 124 }); 125 myCharts.getZr().on('mousemove',parmars=>{ 126 let pointInPixel=[parmars.offsetX,parmars.offsetY]; 127 if(myCharts.containPixel('grid',pointInPixel)){ 128 _this.selectId=-1; 129 // console.log(_this.selectId); 130 myCharts.setOption(option); 131 } 132 }); 133 //监听窗口尺寸事件,使得图表大小始终匹配页面尺寸的变化 134 window.addEventListener('resize',function(){ 135 myCharts.resize(); 136 }) 137 } 138 } 139 }; 140 </script> 141 142 <style scoped> 143 .mydiv{ 144 width: 100%; 145 height: 600px; 146 } 147 </style>

若上述option中的排序设置不生效,可先对数据进行排序,将排序后的数据渲染到图表上。相关增加代码如下:
1 this.data=[ 2 {name:"武汉", value:17}, 3 {name:"合肥",value:33}, 4 {name:"南宁",value:12}, 5 {name:"全场点",value:62} 6 ] 7 8 //在methods中定义一个排序函数,将返回的新数据赋值给this.data 9 sortData(){ 10 const newData = this.data.sort(function(a,b){ 11 return a.value - b.value 12 }) 13 return newData 14 } 15 16 //在合适的地方引用上述排序函数并赋值给this.data,根据this.data得出x轴和y轴的相关数据 17 this.data=this.sortData() 18 let yd=[] 19 let xd=[] 20 this.data.forEach(function(item){ 21 yd.push(item.name) 22 xd.push(item.value) 23 }) 24 25 //然后将yd和xd分别放到合适的x轴,y轴或者series的data位置上
浙公网安备 33010602011771号