Echarts多列柱状图时,鼠标滑过显示百分比

前言

最近在弄echarts图表,遇到了同一个图表展示多个柱子,并且鼠标滑过的时候显示对应的个数以及百分比。

我只展示了我写的js部分,具体的引入使用请参考官网 Echarts官网

一、效果图

在这里插入图片描述
在这里插入图片描述

二、实现方法

1.在series中直接使用tooltip(适合单个柱状图)

代码如下(示例):

<script>
import * as echarts from 'echarts';
import { kpiData } from '@/api/api'

let _self;

export default {
  data(){
    return{
      completionCharts:{},
      percentList:[],
      completionData:[],
    }
  },
  mounted:function(){
    _self = this
    _self.completionInitCharts();
  },
  computed:{
    completionOpt(){
      let completionOption = {
        color:['#2976F7','#9ED13C','#508EFB','#5FC5FF','#45D9B0'],
        legend: {
          width:'90%',
          left:'860',
          top:'0'
        },
        tooltip: {},
        xAxis: {
          type: 'category',
          nameTextStyle:{
            color:'#B6BFCE',
            padding:[3,0,5,0]
          },
          data:[]
        },
        yAxis: {},
        series: [
          {
            type: 'bar',
            barWidth: '20%',
            data: []
          }
        ]
      }
      return completionOption;
    },
    
  },
  methods:{
    //板块指标完成情况
    completionInitCharts(){
      _self.completionCharts = echarts.init(_self.$refs.completionCharts);
      _self.completionCharts.setOption(_self.completionOpt);
      console.log(_self.plateNum)
      completionCharts({'plate':_self.plateNum}).then((res) => {
        console.log(res)
        _self.percentList = res.result.percent
        _self.completionCharts.setOption({
          xAxis: {
            data: res.result.val,  //将异步请求获取到的数据进行装载
          },
          series:[{
            data:res.result.data[0].data,
            tooltip:{
              formatter:function(indexs){
                var percent;
                res.result.data[0].data.forEach((item,index) => {
                  if(indexs.value == item){
                    percent = index
                  }
                })
                return indexs.name + ':<b style="margin:0 10px">'+ _self.percentList[percent]+'%</b><b>'+indexs.value+'</b>'
              }
            }
          }]
        })
      })
    },
  }
}
</script>

其中后台返回的数据格式是

{
	result:[
		{
			'data':['aaaa','bbbb','ccccc'],
			'percent':['10','4','2','6','7']
		}
		
	]
}

2.在tooltip中设置(适合多个柱状图)

代码如下(示例):

<script>
import * as echarts from 'echarts';
import { kpiData } from '@/api/api'

let _self;

export default {
  data(){
    return{
      completionCharts:{},
      percentList:[],
      completionData:[],
    }
  },
  mounted:function(){
    _self = this
    _self.completionInitCharts();
  },
  computed:{
    completionOpt(){
      let completionOption = {
        color:['#2976F7','#9ED13C','#508EFB','#5FC5FF','#45D9B0','#3399CC','#99CCCC','#6699CC','#0099CC'],
        legend: {
          width:'70%',
          left:'860',
          top:'0'
        },
        tooltip: {
          formatter:function(indexs){
            // console.log(indexs)  
            var floor;
            var percents;
            _self.completionData.forEach((item,index) => {
              if(item.name == indexs.seriesName){
                floor = index
                item.data.forEach((items,index) => {
                  if(indexs.data == items && indexs.dataIndex == index){
                    percents = index
                  }
                })
              }
            })
            return indexs.seriesName+'<br />'+indexs.name + ':<b style="margin:0 10px">'+ _self.percentList[floor].percent[percents]+'%</b><b>'+indexs.data+'</b>'
          }
        },
        xAxis: {
          type: 'category',
          nameTextStyle:{
            color:'#B6BFCE',
            padding:[3,0,5,0]
          },
          data:[]
        },
        yAxis: {},
        series: []
      }
      return completionOption;
    },
    
  },
  methods:{
    //板块指标完成情况
    completionInitCharts(){
      _self.completionCharts = echarts.init(_self.$refs.completionCharts);
      _self.completionCharts.setOption(_self.completionOpt);
      kpiData().then((res) => {
        _self.percentList = res.result.percent
        _self.completionData = res.result.data
        _self.completionCharts.setOption({
          xAxis: {
            data: res.result.val,  //将异步请求获取到的数据进行装载
          },
          series:res.result.data
        })
      })
    },
  }
}
</script>

其中后台返回的数据格式是

{
	result:[
		{
			'val':['aaaa','bbbb','ccccc','dddd','eeee'],
			'data':[
				{
					name:'aaaaaaaaaa',
					type:'bar',
					data:['20','30','49','0','50']
				},
				{
					name:'bbbbbbb',
					type:'bar',
					data:['20','30','49','0','50']
				},
				{
					name:'cccccc',
					type:'bar',
					data:['20','30','49','0','50']
				},
				{
					name:'ddddddd',
					type:'bar',
					data:['20','30','49','0','50']
				},
				{
					name:'eeeeee',
					type:'bar',
					data:['20','30','49','0','50']
				}
			],
			'percent':[
				{
					'percent':['10','4','2','6','7']
				},
				{
					'percent':['10','4','2','6','7']
				},
				{
					'percent':['10','4','2','6','7']
				},
				{
					'percent':['10','4','2','6','7']
				},
				{
					'percent':['10','4','2','6','7']
				}
			]
		}
		
	]
}

总结

提示:方法一中的 data 跟 percent 的值必须要一一对应的,
方法二 中的 val 的值是柱状图的x轴的数据, val 的值得个数跟 data:[‘20’,‘30’,‘49’,‘0’,‘50’] 中值得个数是相同的,并且跟 percent 中的值是一一对应的

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue-Echarts多列柱状图是使用Vue框架和Echarts图表库来实现的一种图表类型。它可以显示多个列的柱状图,每个列代表不同的数据系列。在Vue-Echarts中,可以通过高度封装的方式来使用Echarts的折线图和柱状图功能。引用的混入文件可以帮助实现窗口改变,使Echarts图表自适应。 对于多列柱状图,每一列的数据可以通过series中的配置来设置。在3D柱状图中,数据分为底部切片、中间柱子和顶部切片三个部分。可以通过配置不同的系列来表示不同的数据列。 具体实现多列柱状图的步骤如下: 1. 使用Vue-Echarts库来创建一个Vue组件,并引入相关依赖。 2. 在Vue组件中,使用Echarts的option配置对象来设置图表的样式、数据系列。 3. 在option中的series属性中,通过配置不同的系列来表示多个数据列。 4. 按照需求配置其他的Echarts选项,如x轴、y轴、图例等。 5. 在Vue组件中渲染并显示Echarts图表。 通过以上步骤,可以实现一个Vue-Echarts多列柱状图。在图表中,每一列代表一个数据系列,可以展示多个数据的对比情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue-echarts-element-stylus:高度封装的elemnet表格组件,高度封装echarts,excel表格上传,excel表格下载](https://download.csdn.net/download/weixin_42133452/18559339)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue2.x-echarts公共组件封装--简易篇(3d柱状图,炫酷仪表盘,折线,曲线图)](https://blog.csdn.net/vscode_js/article/details/125913485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值