• echarts中饼状图数据太多进行翻页


    echarts饼状图数据太多

    echarts 饼状图内容太多怎么处理

    有些时候,我们饼状图中echarts的数据可能会很多。
    这个时候展示肯定会密密麻麻的。导致显示很凌乱
    我们需要'翻页'类似表格展示下一页的数据
    
    在legend中下需要配置属性 type: 'scroll',表示滚动
    数据太多可以滚动的形式进展示
    如下:
    legend: {
    	type: 'scroll',
    }
    

    自定义分页箭头

    但是我们发现这个分页箭头不好看。
    所以我们需要优化这个分页的箭头
    通过官网的描述信息我们配置如下这只
    这里设置箭头的路径
    var option = {
    	legend: {
    		type: 'scroll', 滚动
    		orient: 'vertical', 垂直方向滚动
    		pageIcons: {
    		 	vertical: [
    		 		'path://M472.064 272.448l-399.232 399.232c-22.08 22.08-22.08 57.792 0 79.872 22.016 22.016 57.792 22.08 79.872 0L512 392.256l359.296 359.296c22.016 22.016 57.792 22.08 79.872 0 22.08-22.08 22.016-57.792 0-79.872L551.936 272.448C529.856 250.432 494.144 250.432 472.064 272.448z',
    				'path://M472.064 751.552 72.832 352.32c-22.08-22.08-22.08-57.792 0-79.872 22.016-22.016 57.792-22.08 79.872 0L512 631.744l359.296-359.296c22.016-22.016 57.792-22.08 79.872 0 22.08 22.08 22.016 57.792 0 79.872l-399.232 399.232C529.856 773.568 494.144 773.568 472.064 751.552z',
    			],
    		},
    		pageButtonPosition: 'end', // 翻页的位置。'start':控制块在左或上,end控制块在右或下。
    		pageIconColor: '#29bca8', // 可以点击的翻页按钮颜色
    		pageIconInactiveColor: '#7f7f7f', // 禁用的按钮颜色
    		pageIconSize: 14, //这当然就是按钮的大小
    	}
    }
    

    有的小伙伴会好奇
    path的值怎么来的,我是从svg中获取的,

    如何在iconfont中获取图标的svg代码

    pageIcons 的值哪些?

    第1种:svg的代码,就是我刚刚使用的
    
    第2种:URL为图片链接例如:'image://http://xxx.xxx.xxx/a/b.png'
    
    第3种:URL为dataURI 例如:
    'image://data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUh
    wFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7'
    

    定义legend的显示内容样式的设置

    在legend下有一个formatter属性
    我们可以通过 formatter 来自定义文字
    formatter: function(name) {
    	let showNum
    	let percentage
    	for (var i = 0; i < listSummary.length; i++) {
    		if (listSummary[i].name == name) {
    			showNum = listSummary[i].value
    			if (lejibaoxiuTotals) { //lejibaoxiuTotals可能为0
    				// 计算百分比
    				percentage =((listSummary[i].value /lejibaoxiuTotals) *100).toFixed(2) + '%'
    			} else {
    				percentage = ''
    			}
    		}
    	}
    	return `{name| ${ name.length > 5 ? name.slice(0, 5) + '...' : name}}
    	| {val| ${percentage}}  {numNum| ${showNum}}`
    },
    
    通过富文本来控制样式
    textStyle: {
    	fontSize: 13, //字体的大小
    	color: '#D9D9D9',
    	rich: {
    		//设置name属性的样式(显示的:华为x),这里与 return中的name保持一致
    		name: {
    			color: '#595959',
    			 77, //宽度
    			padding: [0, 0, 0, 0], //间距表示 上右下左
    		},
    		//设置val(百分比)属性的样式,这里与 return中的val保持一致
    		val: {
    			 50,//宽度
    			color: '#8c8c8c', 、
    			padding: [0, 10, 0, 6], //间距表示 上右下左
    		},
    		//设置numNum(数量)属性的样式,这里与 return中的numNum保持一致
    		numNum: {
    			color: '#8c8c8c',
    		},
    	},
    },
    

    这样就好看一些了

    最终的代码

    <!DOCTYPE html>
    <html lang="en">
    	<head>
    		<meta charset="UTF-8">
    		<meta http-equiv="X-UA-Compatible" content="IE=edge">
    		<meta name="viewport" content="width=device-width, initial-scale=1.0">
    		<title>Document</title>
    		<script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>
    	</head>
    	<body>
    <div  style=" 600px;height: 500px;background-color: pink;"></div>
    <script>
    	var myChart  = echarts.init(document.querySelector('div'))
    	let lejibaoxiuTotals=140;
    	let listSummary=[
    		{name:'华为1',value:10},
    		{name:'华为2',value:10},
    		{name:'华为3',value:10},
    		{name:'华为4',value:10},
    		{name:'华为5',value:10},
    		{name:'华为6',value:10},
    		{name:'华为7',value:10},
    		{name:'华为8',value:10},
    		{name:'华为9',value:10},
    		{name:'华为10',value:10},
    		{name:'华为12',value:10},
    		{name:'华1为13',value:10},
    		{name:'012华3为',value:10},
    		{name:'华1为2',value:10},
    		
    		
    	]
    	var option = {
    		tooltip: {
    			trigger: 'item',
    		},
    		legend: {
    			type: 'scroll',
    			orient: 'vertical',
    			top: 'center',
    			bottom: 40,
    			right: 40,
    			icon: 'circle',
    			itemGap: 18,
    			itemWidth: 8,
    			itemHeight: 8,
    			pageButtonItemGap: 5,
    			textStyle: {
    				fontSize: 13,
    				color: '#D9D9D9',
    				rich: {
    					name: {
    						color: '#595959',
    						 77,
    						padding: [0, 0, 0, 0],
    					},
    					val: {
    						 50,
    						color: '#8c8c8c',
    						padding: [0, 10, 0, 6],
    					},
    					numNum: {
    						color: '#8c8c8c',
    					},
    				},
    			},
    			// 控制legend的间距
    			padding: [10, 0, 20, 20],
    			// 这里设置箭头的路径
    			pageIcons: {
    				vertical: [
    					'path://M472.064 272.448l-399.232 399.232c-22.08 22.08-22.08 57.792 0 79.872 22.016 22.016 57.792 22.08 79.872 0L512 392.256l359.296 359.296c22.016 22.016 57.792 22.08 79.872 0 22.08-22.08 22.016-57.792 0-79.872L551.936 272.448C529.856 250.432 494.144 250.432 472.064 272.448z',
    					'path://M472.064 751.552 72.832 352.32c-22.08-22.08-22.08-57.792 0-79.872 22.016-22.016 57.792-22.08 79.872 0L512 631.744l359.296-359.296c22.016-22.016 57.792-22.08 79.872 0 22.08 22.08 22.016 57.792 0 79.872l-399.232 399.232C529.856 773.568 494.144 773.568 472.064 751.552z',
    				],
    			},
    			pageButtonPosition: 'end', // 翻页的位置。'start':控制块在左或上,end控制块在右或下。
    			pageIconColor: '#29bca8', // 可以点击的翻页按钮颜色
    			pageIconInactiveColor: '#7f7f7f', // 禁用的按钮颜色
    			pageIconSize: 14, //这当然就是按钮的大小
    			
    			formatter: function(name) {
    				let showNum
    				let percentage
    				for (var i = 0; i < listSummary.length; i++) {
    					if (listSummary[i].name == name) {
    						showNum = listSummary[i].value
    						if (lejibaoxiuTotals) {
    							// 计算百分比
    							percentage =((listSummary[i].value /lejibaoxiuTotals) *100).toFixed(2) + '%'
    						} else {
    							percentage = ''
    						}
    					}
    				}
    				return `{name| ${name.length > 5 ? name.slice(0, 5) + '...' : name}} | {val| ${percentage}}  {numNum| ${showNum}}`
    			},
    		},
    
    		series: [{
    			type: 'pie',
    			// 饼粗的大小
    			radius: ['44%', '60%'],
    			// 图形展示的位置
    			center: ['30%', 'center'],
    			avoidLabelOverlap: false,
    			itemStyle: {
    				borderRadius: 0,
    				borderColor: '#fff',
    				borderWidth: 2,
    			},
    			label: {
    				show: false,
    				position: 'center',
    			},
    			// emphasis 不展示中间的文字
    			labelLine: {
    				show: false,
    			},
    
    			data: listSummary, //[{name:'xx',value:'x'}]
    		}, ],
    		title: {
    			text: lejibaoxiuTotals ? lejibaoxiuTotals : '', //展示的总数据
    			left: '27%',
    			top: '47%',
    			textStyle: {
    				color: '#031f2d',
    				fontSize: 20,
    				align: 'center',
    			},
    		},
    	}
    	// 使用刚指定的配置项和数据显示图表。
    	myChart.setOption(option)
    </script>
    	</body>
    </html>
    

    尾声

    如果你觉得我写的还不错的话
    关注我或者给我点赞打赏
    这是我写下去的动力
    
  • 相关阅读:
    并行数据的并行转串行
    色彩空间转换仿真与模型搭建
    布隆过滤器介绍和在java中应用举例
    java9初探
    个人博客开通啦!
    MyBatis多租户隔离插件开发
    手动解析Excel获取文件元数据
    解决Shiro+SpringBoot自定义Filter不生效问题
    基于Redis的分布式锁实现
    解决tomcat同时部署两个SpringBoot应用提示InstanceAlreadyExistsException
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/15637514.html
Copyright © 2020-2023  润新知