Echart柱形图stack堆叠图显示总数

 

 

前言

博主刚好遇到这个问题,我在网上找了一圈,发现大家都是用增加一个柱形图作为总数,把背景改为透明的。这种方案的问题是Y轴总数据是原来的两倍,最大值很大,导致柱子看起来压缩了一半,不美观,作为一个前端来说,美观当然很重要了!所以我想出了一个方案,如下:

实现效果如下:


一、实现原理

利用最后一个柱形图的label属性,显示总数。

二、关键代码

 

// 基于准备好的dom,初始化echarts实例
	let myChart = echarts.init(document.getElementById(''));
	let normal=[320, 302, 301, 334,320, 302, 301, 334];
	let larger=[320, 302, 301, 334,320, 302, 301, 334];
	let great=[320, 302, 301, 334,320, 302, 301, 334];
	let veryGreat=[320, 302, 301, 334,320, 302, 301, 334];
	//计算总数
	let total_data=(()=>{
		var datas = [];
		normal.forEach((item,index)=>{
			datas.push(normal[index]+larger[index]+great[index]+veryGreat[index]);
		})
		return datas;
	})();
	console.log(total_data);
	// 绘制图表
	let option={
		color: [],
		tooltip: {
			trigger: 'axis',
			axisPointer: {            // Use axis to trigger tooltip
				type: 'shadow'        // 'shadow' as default; can also be 'line' or 'shadow'
			}
		},
		legend: {
			selectedMode:false,//取消图例上的点击事件
			left: 20,
			data: ['一般', '较大', '重大', '特别重大'],
		},
		grid: {
			left: '3%',
			right: '60',
			bottom: '3%',
			containLabel: true
		},
		yAxis: {
			name: '风险个数',
			type: 'value',
			axisLabel:{
				show: true,
			},
			axisLine:{
				show: true,
			},
			axisTick:{
				show: false,
			},
			splitLine:{
				show: true,
			},
		},
		xAxis: {
			name: '',
			type: 'category',
			data: ['分类1', '分类2', '分类3', '分类4',
			'分类5','分类6','分类7','分类8'],
			axisLabel:{
				show: true,
				interval: 0,
				rotate: 30,
			},
			splitLine:{
				show: false,
			},
			axisLine:{
				show: true,
			},
			axisTick:{
				show: false,
			},
		},
		series: [
			{
				barCategoryGap: '30%',
				name: '一般',
				type: 'bar',
				stack: 'total',
				label: {
					show: false,
				},
				data: [320, 302, 301, 334,320, 302, 301, 334]
			},
			{
				name: '较大',
				type: 'bar',
				stack: 'total',
				label: {
					show: false,
				},
				data: [120, 132, 101, 134]
			},
			{
				name: '重大',
				type: 'bar',
				stack: 'total',
				label: {
					show: false,
				},
				data: [220, 182, 191, 234]
			},
			{
				name: '特别重大',
				type: 'bar',
				stack: 'total',
				label: {
                    //最后一个label显示总数数据
					position: 'top',
					color: '#333',
					show: true,
					formatter:function(param){
						return total_data[param.dataIndex];
						// console.log(param);
					},
				},
				data: [150, 212, 201, 154]
			},
		]
	};
	myChart.setOption(option);

总结

利用echart显示假数据原理,注意不能启用legend图例效果,tooltip是可以用的。

分享不易,大家点赞支持下哟,谢谢(#^.^#)

### 解决ECharts柱形图重叠显示的方法 在 ECharts 中实现柱形图的重叠显示效果可以通过调整图表配置来完成。具体来说,通过设置多个 `series` 数据集并合理配置这些系列之间的关系,可以使不同数据集在同一位置上叠加展示。 对于希望达到多组柱状图重叠的效果,在同一个 Grid 内存在多组数据的情况下,如果取消图例可能会导致柱子居中的现象发生;因此建议采取每一组柱子对应一个独立的 Grid 的方式处理[^2]。下面是一个简单的例子说明如何做到这一点: ```javascript option = { grid: [ {left: '10%', top: '10%'}, // 第一个grid的位置设定 {right: '10%', bottom: '10%'} // 第二个grid的位置设定 ], xAxis: [ { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], gridIndex: 0, }, { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], gridIndex: 1, axisLabel: {show: false}, // 隐藏第二个X轴标签防止重复 } ], yAxis: [{gridIndex: 0},{gridIndex: 1}], series : [ { name:'Series A', type:'bar', stack: 'total', data:[320, 332, 301, 334, 390, 330, 320], itemStyle:{color:'#d87c7c'}, animationDelay: function (idx) { return idx * 10; } }, { name:'Series B', type:'bar', stack: 'total', data:[120, 132, 101, 134, 90, 230, 210], itemStyle:{color:'#facc14'}, animationDelay: function (idx) { return idx * 10 + 100; } } ] }; ``` 上述代码片段展示了如何创建两个不同的 X 轴和 Y 轴实例,并分别为它们分配到各自的 Grid 上下文中去。同时设置了相同的分类名称列表用于同步两者的刻度线对齐情况。另外还利用了 `stack` 属性让 SeriesA 和 SeriesB 在视觉上形成堆叠效果而不是简单覆盖。 此外,针对 eCharts 柱形图 label 文字过长时可能出现的重叠问题,可以考虑使用自定义 formatter 函数或者启用新版本中提供的自动避障功能来优化文本布局[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值