echarts图表进度条类型图

1、实现效果
左边是类别、数量,中间类似于进度条,右边是所占百分比
在这里插入图片描述
2、实现思路
x轴不显示,y轴的axisLabel用富文本,显示机器与台数;图表有两个数据组,分别用蓝色和灰色表示,两个柱子重合,灰色柱子在蓝色柱子下面;灰色柱子的label用富文本,显示占比。
3、实现代码
(1)在template里写个容器

<div class="chartStyle" ref="chartImplement"></div>

在style里定义容器的大小

.chartStyle {
	height: 300px;
	width: 700px;
}

(2)在data里声明一个变量

myChartLine:'',

在methods里写个配置图表的函数,输入参数为dataAll,包含了机具的类型、数量、占比等信息。数据格式为
dataAll = {
dataX: dataX,//类别
dataY: dataY,//数量
dataSum: dataSum,//总数
dataPercent: dataPercent,//占比
}

initSchedule(dataAll) {
				let _this = this;
				this.myChartLine = echarts.init(this.$refs.chartImplement)
				let myColor = ['#3C83FF']
				var option = {
					grid: { // 直角坐标系内绘图网格
						left: '25%', //grid 组件离容器左侧的距离,
						//left的值可以是80这样具体像素值,
						//也可以是'80%'这样相对于容器高度的百分比
						right: '15%',
						//containLabel: true   //gid区域是否包含坐标轴的刻度标签。为true的时候,
						// left/right/top/bottom/width/height决定的是包括了坐标轴标签在内的
						//所有内容所形成的矩形的位置.常用于【防止标签溢出】的场景
					},
					xAxis: { //直角坐标系grid中的x轴,
						//一般情况下单个grid组件最多只能放上下两个x轴,
						//多于两个x轴需要通过配置offset属性防止同个位置多个x轴的重叠。
						type: 'value', //坐标轴类型,分别有:
						//'value'-数值轴;'category'-类目轴;
						//'time'-时间轴;'log'-对数轴
						splitLine: {
							show: false
						}, //坐标轴在 grid 区域中的分隔线
						axisLabel: {
							show: false
						}, //坐标轴刻度标签
						axisTick: {
							show: false
						}, //坐标轴刻度
						axisLine: {
							show: false
						}, //坐标轴轴线
					},
					yAxis: {
						type: 'category',
						axisTick: {
							show: false
						},
						axisLine: {
							show: false
						},
						axisLabel: {
							color: 'rgba(0,0,0,.7)',
							fontSize: 14,
							formatter: function(data) {
								var traceValue;
								for (var i = 0; i < dataAll.dataX.length; i++) {
									if (data === dataAll.dataX[i]) {
										traceValue = dataAll.dataY[i]
										break
									}
								}
								var arr = [
									'{a|' + data + '}',
									'{b|' + traceValue + '}',
									'{c|台}'
								]
								return arr.join('')
							},
							textStyle: {
								rich: {
									a: {
										fontSize: 14,
										width: 100
									},
									b: {
										fontSize: 14,
										align: 'center',
										color: '#3C83FF',
										fontWeight: 600,
									},
									c: {
										padding: [0, 0, 0, 5],
										fontSize: 14,
										align: 'center',
									}
								}
							},
						},
						data: dataAll.dataX //类目数据,在类目轴(type: 'category')中有效。
						//如果没有设置 type,但是设置了axis.data,则认为type 是 'category'。
					},
					series: [ //系列列表。每个系列通过 type 决定自己的图表类型
						{
							name: '%', //系列名称
							type: 'bar', //柱状、条形图
							barWidth: 15, //柱条的宽度,默认自适应
							data: dataAll.dataPercent, //系列中数据内容数组
							label: { //图形上的文本标签
								show: true,
								position: 'right', //标签的位置
								offset: [0, -40], //标签文字的偏移,此处表示向上偏移40
								//formatter: '{c}{a}',//标签内容格式器 {a}-系列名,{b}-数据名,{c}-数据值
								formatter: function(data) {
									//.toFixed(0)去掉小数位,如果为2就是保留两位小数
									//let b = data.percent.toFixed(0) + "%";
									//subText = b;
									return '';
								},
								color: 'rgba(0,0,0,.7)', //标签字体颜色
								fontSize: 26 //标签字号
							},
							itemStyle: { //图形样式
								normal: { //normal 图形在默认状态下的样式;
									//emphasis图形在高亮状态下的样式
									barBorderRadius: 10, //柱条圆角半径,单位px.
									//此处统一设置4个角的圆角大小;
									//也可以分开设置[10,10,10,10]顺时针左上、右上、右下、左下
									color: function(params) {
										let num = myColor.length; //得到myColor颜色数组的长度
										return myColor[params.dataIndex % num]; //返回颜色数组中的一个对应的颜色值
									},
								}
							},
							zlevel: 1 //柱状图所有图形的 zlevel 值,
							//zlevel 大的 Canvas 会放在 zlevel 小的 Canvas 的上面
						},
						{
							name: '进度条背景',
							type: 'bar',
							label: { //图形上的文本标签
								show: true,
								position: 'right', //标签的位置
								offset: [0, 0], //标签文字的偏移,此处表示向上偏移40
								//formatter: '{c}{a}',//标签内容格式器 {a}-系列名,{b}-数据名,{c}-数据值
								formatter: function(data) {
									//.toFixed(0)去掉小数位,如果为2就是保留两位小数
									var traceValue;
									for (var i = 0; i < dataAll.dataX.length; i++) {
										if (data.name === dataAll.dataX[i]) {
											traceValue = dataAll.dataPercent[i]
											break
										}
									}
									var arr = [
										'{a|' + traceValue + '}',
										'{b|%}'
									]
									return arr.join('');
								},
								textStyle: {
									rich: {
										a: {
											fontSize: 14,
											color: 'rgba(0,0,0,0.7)',
											fontWeight: 560,
											padding: [0, 0, 0, 15],
										},
										b: {
											fontSize: 14,
											color: 'rgba(0,0,0,0.7)',
											padding: [0, 0, 0, 3],
											align: 'center',
										},
									}
								},
							},
							barGap: '-100%', //不同系列的柱间距离,为百分比。
							// 在同一坐标系上,此属性会被多个 'bar' 系列共享。
							// 此属性应设置于此坐标系中最后一个 'bar' 系列上才会生效,
							//并且是对此坐标系中所有 'bar' 系列生效。
							barWidth: 15,
							data: dataAll.dataSum,

							color: '#DEE0E3', //柱条颜色
							itemStyle: {
								normal: {
									barBorderRadius: 10
								}
							}
						},

					]
				};
				this.myChartLine.setOption(option, true);
				window.addEventListener("resize", () => {
					if (this.myChartLine) {
						this.myChartLine.resize();
					}
				});
			},

(3)调用该函数
这里假设有100台机器,初始化数据

initData() {
				var dataX = ['旋耕机1', '旋耕机2', '旋耕机3', '旋耕机4', '旋耕机5']
				var dataY = ['30', '20', '15', '25', '10'];
				var dataPercent = ['30', '20', '15', '25', '10'];
				var dataSum = new Array(dataX.length).fill(100);
				var data = {
					dataX: dataX,
					dataY: dataY,
					dataSum: dataSum,
					dataPercent: dataPercent,
				}
				this.initSchedule(data);
			},

在mounted中调用initData

mounted() {
			this.initData();
		},

完成

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用 ECharts 来创建双向进度条。双向进度条是一种能够显示进度完成情况的图表,同时可以显示进度的正向和反向值。下面是一个使用 ECharts 创建双向进度条的示例代码: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ECharts 双向进度条示例</title> <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> </head> <body> <div id="progress" style="width: 400px; height: 200px;"></div> <script type="text/javascript"> var chart = echarts.init(document.getElementById('progress')); var option = { series: [ { type: 'liquidFill', data: [0.6, 0.4], radius: '70%', center: ['50%', '50%'], label: { normal: { formatter: function(params) { return (params.value * 100).toFixed(0) + '%'; }, textStyle: { fontSize: 20, color: '#000' } } }, backgroundStyle: { color: 'rgba(220, 220, 220, 0.8)' }, itemStyle: { color: '#0099CC' } } ] }; chart.setOption(option); </script> </body> </html> ``` 在这个示例中,我们使用了 ECharts 的 `liquidFill` 类型来创建双向进度条。通过设置 `data` 数组的两个值,可以控制正向和反向进度的完成情况。在 `label` 中,我们设置了进度百分比的显示样式。 你可以将以上代码保存为一个 HTML 文件,然后在浏览器中打开该文件,就可以看到双向进度条的效果。你也可以根据自己的需要,调整样式和数据,来满足具体的需求。希望对你有所帮助!如果还有其他问题,请继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zttbee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值