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

在这里插入图片描述
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)

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

  • 26
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
自定义echarts饼图图例,可以按照以下步骤进行操作: 1. 在option中添加legend对象,设置图例的相关属性。例如,可以设置图例的布局方式水平垂直)、是否添加滚动页码、图例的位置、图例的图标样式、图例的字体样式等。示例代码如下: ``` legend: { orient: "vertical", //图例的布局,水平布局、垂直布局 type: 'scroll', //是否添加滚动页码 data: count, //图例的数据,可以是一个数组或对象 right: 15, //图例距离容器右侧的距离 top: 'middle', //图例距离容器顶部的距离 icon: 'circle', //图例的图标样式 itemWidth: 8, //图例的宽度 itemHeight: 8, //图例的高度 textStyle: { //图例字体样式 color: "#000", //字体颜色 fontSize: 14, //字体大小 fontFamily: "微软雅黑" //字体样式 } } ``` 通过以上步骤,您可以自定义echarts饼图图例,根据需要设置相关属性,使图例符合您的要求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [echarts饼图图例自定义、数值直观显示、标题位置](https://blog.csdn.net/wyl164778/article/details/118999300)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [解决echarts饼图标签重叠的问题](https://download.csdn.net/download/weixin_38554186/13711299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杨同学*

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

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

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

打赏作者

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

抵扣说明:

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

余额充值