关于使用echarts堆叠柱状图百分比显示的问题

关于使用echarts堆叠柱状图百分比显示的问题

平常工作没有涉及到echarts,所以平常也没有去关注图表这一块,然后碰到一个需求,要求使用堆叠柱状图,但是数值是需要百分比显示的,不是在所获取到的数字后直接加%,全网搜索了一下,可能是关键字不正确,并没有找到相关的代码,于是只能自己写了。


先上图吧,看符不符合各位的需求,如不符合,那么不需要再继续看下去了,节省各位的时间。
X轴显示0~100%,y轴显示对应的item,根据数值计算,得出对应的百分比

上代码

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>ECharts</title>
  <!-- 引入 echarts.js -->
  <script src="https://lib.baomitu.com/echarts/4.7.0/echarts.js"></script>
</head>

<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'));
	myChart.title = 'test'
	var data = [
        { "name": "testOne", "tjz": 13, "zgz": 271},
        { "name": "testTwo", "tjz": 68.28, "zgz": 78.6},
        { "name": "testThree", "tjz": 85, "zgz": 291}
	]
    // 指定图表的配置项和数据
	var option = {
		color: ['#81C1DC', '#3488AD', '#00557C'],//设置颜色
		tooltip: {
			trigger: 'axis',
			axisPointer: { // 坐标轴指示器,坐标轴触发有效
				type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
			},
			formatter: function(params) {// 这里鼠标悬浮显示对应item的每项数值
				var relVal = params[0].name;
				relVal += '<br/>' + params[0].marker + params[0].seriesName + ' : ' + this.data[params[0].dataIndex].tjz;// 统计值
				relVal += '<br/>' + params[1].marker + params[1].seriesName + ' : ' + this.data[params[0].dataIndex].zgz;// 最高值
				return relVal;
			},
		},
		// 顶部显示
		legend: {
			data: ['统计值', '最高值']
		},
		// 设置下方图标的位置
		grid: {
			left: '3%',
			right: '4%',
			bottom: '3%',
			top:'7%',
			containLabel: true
		},
		// 设置X轴的参数
		xAxis: [
			{  
				type: 'value',
				max : 100,// 设置最大值是多少
				splitNumber: 5,// 设置分几段显示
				axisLabel: {  
					show: true,  
					interval: 'auto',  
					formatter: '{value} %'  // 给每个数值添加%
				},  
				show: true
			}  
		],
		// 设置Y轴的参数
		yAxis: {
			type: 'category',
			data: initDataName()// 这里是显示名称
		},
		// 设置每个item的参数
		series: [{
				name: '统计值',
				type: 'bar',
				stack: '总量',
				label: {
					show: true,
					position: 'insideLeft',//在左边显示
					formatter: '{c}%'// 给计算后的数值添加%
				},
				//data: [13, 68.28, 85]
				data:initData('tjz')// 计算对应的百分比
			},
			{
				name: '最高值',
				type: 'bar',
				stack: '总量',
				label: {
					show: true,
					position: 'insideRight',// 在右边显示
					formatter: '{c}%'
				},
				data:initData('zgz')
			}
		]
	};
	// 显示左侧名称
	function initDataName(){
		var nameList = []
		for (var i = 0; i < this.data.length; i++) {
			nameList.push(this.data[i].name)
		}
		return nameList
	}
	//计算统计值和最高值
	function initData(val){
		var serie = [];
        for (var i = 0; i < this.data.length; i++) {
			var num = 0
			if(val == 'tjz'){//计算统计值
				num = this.data[i].tjz
			}else if (val == 'zgz') {//计算最高值
				num = this.data[i].zgz
			}
			var total = (parseFloat(this.data[i].tjz) + parseFloat(this.data[i].zgz)).toFixed(2);
			var numcount = Percentage(num,total)
            serie.push(numcount);
        }
        return serie;
	}
	//计算两者占比
	function Percentage(num, total) {
		return (Math.round(num / total * 10000) / 100.00);// 小数点后两位百分比
	}
	// 使用刚指定的配置项和数据显示图表。
	myChart.setOption(option);
  </script>
</body>

</html>

上面就是所用到的全部代码了,是比较麻烦些,我也没想到更简单的,如果有更简单的,望告知,谢谢!
如果各位看了以上代码,没有帮助到你,在此表示抱歉。
永远相信,美好的事情,即将发生!

  • 13
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值