echarts使用饼图之自定义饼图图例的排列方式,水平,垂直,两端排列

本文介绍如何使用ECharts绘制饼图,并详细讲解了自定义图例排列方式的方法,包括水平、垂直、两端排列及图例后添加百分比等技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
1,引入饼图
这一步大多数应该都会,官网有例子,直接cv就可以用,简单提一下吧

<template>
  <div class="box">
    <div id="mycircle"></div>
  </div>
</template>
<script>
export default {
  data(){
    return{
    	option: {
			tooltip:{},
			legend:{},
			series:[],
			......
		}
    }
  },
  methods:{
	async init(){
	  var myChart = this.$echarts.init(document.getElementById('mycircle'));
      myChart.setOption(this.option);
      myChart.clear();
      await getIndex7DayException().then(data => {
		// data返回值格式就是[{name: '', value: ''}],有且只能是name和value这两个key,其他都不行
		// 如果返回值是其他的,那就需要转化一下了
        data.map(v =>{
          let keymap = {count: 'value',areaName: 'name'}  // 将count字段转成value字段,areaName字段转化成name字段
          Object.keys(v).map(k =>{
            let newKey = keymap[k]
            if (newKey) {
              v[newKey] = v[k]
              delete v[k]
            }
          })
        })
        this.option.series[0].data = data;
        myChart.setOption(this.option);
        window.addEventListener("resize", () => { myChart.resize() });
	  }
	}
  },
  mounted(){
    this.init()
  }
}
</script>

到这为止,图表就可以正常显示了,下面开始自定义图例的排列方式
1.水平顶部(底部)排列
top: 0
在这里插入图片描述
bottom: 0
在这里插入图片描述

legend:{
 top: '0',
 //bottom: '0'
 textStyle: { color: '#fff'},
}
            

2,垂直左右排列
垂直属性: orient: ‘vertical’,
left: 0
在这里插入图片描述
right: 0
在这里插入图片描述

legend:{
  left: '0',
  // right: '0'
  textStyle: {  color: '#fff'},
  orient: 'vertical',
}

3,两端排列
顶部一半,底部一半
在这里插入图片描述

        legend: [
          {
            top: '0',
            textStyle: {  color: '#fff', padding: [11,0,11,0] },
            data: [],
          },
          {
            bottom: '0',
            textStyle: {  color: '#fff', padding: [11,0,11,0] },
            data: [],
          },
        ],

        init(){
        	  this.option.legend[0].data = legendName.slice(0,5)
     	      this.option.legend[1].data = legendName.slice(-5)
        }

左边一半,右边一半
在这里插入图片描述

        legend: [
          {
            x: 'left',
            textStyle: {  color: '#fff', padding: [11,0,11,0] },
            orient: 'vertical',
            data: [],
          },
          {
            x: 'right',
            textStyle: {  color: '#fff', padding: [11,0,11,0] },
            orient: 'vertical',
            data: [],
          },
        ],

   init(){
        	  this.option.legend[0].data = legendName.slice(0,5)
     	      this.option.legend[1].data = legendName.slice(-5)
        }

4,图例后面拼接占比百分比
每个图例后面拼接该部分占整体的百分比
1,上下左右排列+占比百分比
在这里插入图片描述

        legend:{
            x: 'left',
            textStyle: {  color: '#fff',  },
            orient: 'vertical',
            data: [],
            formatter: e =>{
              var data = this.option.series[0].data;
              var total = 0;
              var val = 0;
              data.forEach(el => {
                total += el.value;
                if(e == el.name) val = el.value
              });
              return `${e}  ${((val / total)*100).toFixed(2)}%`
            }
          },

this.option.legend.data = legendName

2.两端排列+占比百分比
在这里插入图片描述

        legend: [
          {
            x: 'left',
            textStyle: {  color: '#fff', padding: [11,0,11,0] },
            orient: 'vertical',
            data: [],
            formatter: e =>{
              var data = this.option.series[0].data;
              var total = 0;
              var val = 0;
              data.slice(0,5).forEach(el => {
                total += el.value;
                if(e == el.name) val = el.value
              });
              return `${e}  ${((val / total)*100).toFixed(2)}%`
            }
          },
          {
            x: 'right',
            textStyle: {  color: '#fff', padding: [11,0,11,0] },
            orient: 'vertical',
            data: [],
            formatter: e =>{
              var data = this.option.series[0].data;
              var total = 0;
              var val = 0;
              data.forEach(el => {
                total += el.value;
                if(e == el.name) val = el.value
              });
              return `${e}  ${((val / total)*100).toFixed(2)}%`
            }
          },
        ],

		this.option.legend[0].data = legendName.slice(0,5)
        this.option.legend[1].data = legendName.slice(-5)

记录一下
📢没了,结束了,是不是很简单呐,如有错误,欢迎留言.如有问题,不吝赐教。
📢如果此篇博文对您有帮助,还请动动小手点赞 👍 收藏 ⭐留言 📝呐~,谢谢 ~ ~

任务分发看板UI参考 页面整体为桌面端Web后台管理界面,适配设备为1920px宽桌面端,页面容器宽度1200px,居中显示,左右边距360px,背景色#FFFFFF。 顶部导航栏 位置:页面最顶部,宽度100%(1920px),高度60px,背景色#FFFFFF,底部边框1px solid #E5E7EB。 内容:左侧有蓝色汉堡菜单标(尺寸24x24px),右侧横向排列多个标签页文字,包括“首页”“项目立项管理”“项目计划管理”“项目验收管理”“任务分发管理”“任务开发管理”“任务分发看板”,当前选中标签为“任务分发看板”,文字颜色#1E40AF,下方有2px宽、8px高的蓝色下划线(#3B82F6),未选中标签文字颜色#4B5563,字体大小14px,字体为Inter,各标签间距24px。 筛选区域 位置:导航栏下方,距离顶部导航栏20px,宽度100%(1200px),高度48px。 内容:从左到右依次排列筛选按钮组、日期输入框、确定按钮。 筛选按钮组:包含“本月”“本季度”“本年”“自定义”4个按钮,按钮为圆角矩形(圆角6px),未选中按钮背景色#F3F4F6,文字颜色#4B5563,选中按钮背景色#3B82F6,文字颜色#FFFFFF,按钮高度36px,宽度64px(“自定义”按钮宽度72px),字体大小14px,Inter字体,按钮间距12px。 日期输入框:“开始日期”“结束日期”输入框,左侧有日历标(尺寸16x16px,颜色#9CA3AF),输入框为白色背景,边框1px solid #E5E7EB,圆角6px,宽度140px,高度36px,内边距12px,文字颜色#1F2937,字体大小14px,Inter字体,两个输入框之间有“至”文字(颜色#6B7280,字体大小14px),间距12px。 确定按钮:蓝色圆角矩形按钮(#3B82F6),文字“确定”,白色字体,字体大小14px,Inter字体,高度36px,宽度80px,圆角6px,右侧距筛选区域边缘0px。 统计表区域 位置:筛选区域下方,距离筛选区域24px,宽度100%(1200px),高度320px,包含三个表,从左到右横向排列,各表宽度占比32%、32%、32%,表之间间距24px。 左侧:任务完成情况统计(柱状) 容器:白色背景,圆角8px,边框1px solid #E5E7EB,内边距16px,高度320px。 标题:“任务完成情况统计”,文字颜色#1F2937,字体大小16px,Inter字体,加粗,位于容器顶部左侧,距离顶部内边距16px,距离左侧内边距16px。 图例:位于标题下方,距离标题12px,横向排列“未完成”(文字颜色#1E40AF,左侧有8x8px深蓝色方块#1E40AF)、“已完成”(文字颜色#3B82F6,左侧有8x8px浅蓝色方块#3B82F6),文字大小12px,Inter字体,间距16px。 柱状:位于图例下方,距离图例20px,宽度100%,高度200px。X轴标签为“30日”“2日”“4日”“6日”“8日”“10日”“12日”“14日”“16日”“18日”“20日”“22日”“24日”“26日”“28日”“30日”,字体大小12px,颜色#6B7280;Y轴刻度0-100,间隔20,字体大小12px,颜色#6B7280;柱子为圆角矩形(顶部圆角4px),未完成柱子颜色#1E40AF,已完成柱子颜色#3B82F6,柱子宽度12px,柱子间距8px;每个柱子顶部居中显示具体数值(如“80”“75”等),字体大小12px,颜色#1F2937。 中间:责任人完成情况(条形) 容器:白色背景,圆角8px,边框1px solid #E5E7EB,内边距16px,高度320px。 标题:“责任人完成情况”,文字颜色#1F2937,字体大小16px,Inter字体,加粗,位于容器顶部左侧,距离顶部内边距16px,距离左侧内边距16px。 图例:与左侧柱状图图一致,位于标题下方,距离标题12px。 条形:位于图例下方,距离图例20px,宽度100%,高度200px。Y轴标签为“吴十”“周九”“孙八”“钱七”“赵六”“王五”“李四”“张三”,字体大小12px,颜色#6B7280,右对齐;X轴刻度0-80,间隔20,字体大小12px,颜色#6B7280;条形为圆角矩形(右侧圆角4px),未完成条形颜色#1E40AF,已完成条形颜色#3B82F6,条形高度24px,条形间距8px;每个条形右侧显示具体数值(如“80”“70”等),字体大小12px,颜色#1F2937。 右侧:任务状态分布() 容器:白色背景,圆角8px,边框1px solid #E5E7EB,内边距16px,高度320px。 标题:“任务状态分布”,文字颜色#1F2937,字体大小16px,Inter字体,加粗,位于容器顶部左侧,距离顶部内边距16px,距离左侧内边距16px。 :位于标题下方,距离标题32px,居中显示,直径160px。未完成区域占比约40%,颜色#1E40AF;已完成区域占比约60%,颜色#3B82F6;中心显示两行文字,上行“已完成:60%”,下行“未完成:40%”,字体大小14px,颜色#1F2937,Inter字体,文字居中对齐。 图例:位于下方,距离20px,横向排列“已完成”(文字颜色#3B82F6,左侧有8x8px浅蓝色方块#3B82F6)、“未完成”(文字颜色#1E40AF,左侧有8x8px深蓝色方块#1E40AF),文字大小12px,Inter字体,间距24px,居中显示。 任务列表区域 位置:统计表区域下方,距离统计表区域32px,宽度100%(1200px),高度自适应(根据内容,当前显示5条任务,高度约280px),背景色#FFFFFF,边框1px solid #E5E7EB,圆角8px。 标题:“任务列表”,文字颜色#1F2937,字体大小16px,Inter字体,加粗,位于列表容器顶部左侧,距离顶部内边距16px,距离左侧内边距16px。 表格:位于标题下方,距离标题16px,宽度100%,边框-collapse,单元格无内边距。 表头:高度40px,背景色#F3F4F6,包含“任务号”“名称”“成果物”“责任人”“计划完成时间”5列,每列表头文字颜色#4B5563,字体大小14px,Inter字体,居中对齐,各列宽度占比15%、25%、20%、15%、25%,表头底部边框1px solid #E5E7EB。 表体:每行高度48px,边框底部1px solid #E5E7EB,hover时行背景色#F9FAFB。 第1行:任务号“TASK-1001”,名称“任务名称1”,成果物“文档”,责任人“李四”,计划完成时间“2025/8/5”,文字颜色#1F2937,字体大小14px,Inter字体,居中对齐。 第2行:任务号“TASK-1002”,名称“任务名称2”,成果物“报告”,责任人“钱七”,计划完成时间“2025/8/10”,文字颜色#1F2937,字体大小14px,Inter字体,居中对齐。 第3行:任务号“TASK-1003”,名称“任务名称3”,成果物“代码”,责任人“王五”,计划完成时间“2025/8/26”,文字颜色#1F2937,字体大小14px,Inter字体,居中对齐。 第4行:任务号“TASK-1004”,名称“任务名称4”,成果物“设计”,责任人“李四”,计划完成时间“2025/8/27”,文字颜色#1F2937,字体大小14px,Inter字体,居中对齐。 第5行:任务号“TASK-1005”,名称“任务名称5”,成果物“测试用”,责任人“张三”,计划完成时间“2025/8/27”,文字颜色#1F2937,字体大小14px,Inter字体,居中对齐。 滚动条:表格右侧有纵向滚动条,宽度6px,背景色#E5E7EB,滑块颜色#9CA3AF,圆角3px,滑块高度根据内容自适应。
最新发布
08-01
ECharts 提供了强大的自定义功能,图例也可以通过多种方式进行定制化设置。下面简要介绍如何对 ECharts进行图例自定义: ### 基础步骤: 1. **引入 ECharts** 确保项目中已经成功引用了 ECharts 库。 2. **初始化表实** 使用 `echarts.init` 初始化一个表容器。 3. **配置项中的 legend 设置** - 图例组件可以使用 `legend` 属性来自定义样式、位置等。 - 可以调整图例的位置如左上角 (`left: 'center', top: 'top'`) 或者右下角等等。 4. **修改图例样式** - 自定义字体大小:`textStyle.fontSize` - 修改颜色:`textStyle.color` 5. **动态显示隐藏某部分数据** - 利用点击事件监听图例交互情况,并更新对应的数据展示状态。 示如下: ```javascript option = { tooltip: {}, legend: { // 定制图例外观及交互属性 orient: 'vertical', left: 10, data: ['直接访问', '邮件营销','联盟广告'] }, series: [{ name: '来源', type: 'pie', radius: ['50%', '70%'], avoidLabelOverlap: false, label: { normal: { show: true, position: 'outside' } }, data:[ {value:335, name:'直接访问'}, {value:310, name:'邮件营销'}, {value:234, name:'联盟广告'} ] }] }; ``` 此代码块创建了一个简单的饼状图并设置了垂直排列的左侧图例列表。 ### 更复杂的场景 如果需要更高级的效果比如将图例在特殊区域或是添加额外视觉元素,则需要用到 echarts形绘制 API 分组管理能力去深入控制每个细节的表现形式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杨同学*

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

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

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

打赏作者

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

抵扣说明:

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

余额充值