echarts多个饼图环图中间固定文字,鼠标移入后出现相应的提示

在这里插入图片描述
项目中遇到这种需求,有两种解决方法,
一.在echarts的配置手册中搜graphic属性,并配置,可以在圈内显示固定的文字

graphic: [
           { //环形图中间添加文字
                type: 'text', //通过不同top值可以设置上下显示
                left: 'center',
                top: '55%',
                style: {
                    text: join,
                    textAlign: 'center',
                    fill: '#1eb4ff', //文字的颜色
                    width: 30,
                    height: 30,
                    fontSize: 14,
                    fontFamily: "Microsoft YaHei",
               }
            }
         ]

ps:不过这样写有个弊端,就是必须写4个环图并配置属性,非常麻烦.于是提供下面一种做法.
二.搜索echarts中的series属性,可以配置多个饼图或者环图,不过此时它们会重叠在一起,然后搜索series.center属性,可以在配置series时,改变每个图的位置.结合下面代码的第一个series配置看.

let dom = this.$refs.classDataPic
let myChart = this.$echarts.init(dom)
myChart.setOption({
      tooltip: {  //此处配置鼠标移动对应区域时的黑色弹框
           trigger: 'item',
           formatter: '{b}: {c} ({d}%)'
       },
       series: [
           {
               name: '发布课堂',     //配置formatter时候会用到(就是{a})
               type: 'pie',
               radius: ['45%', '55%'],    // 配置饼图和环图的内圆和外圆的大小
               center: ['13%', '50%'],   //配置图形的位置,前面一个是x轴,后面一个是y轴,'50%'代表是水平居中
               avoidLabelOverlap: false,
               label: {
                   normal: {
                       show: false,    //默认显示关闭,如果此处是true,则数据重叠
                       position: 'center',    //显示的位置,center是饼环图中间显示,
                       formatter: `{a}\n${7}`     //此处的7为假数据,其实就是下面data数组中的value相加,都可以取到的,但是此处都是模拟数据
                   },
                   emphasis: {
                       show: true,
                   }
               },
               data: [
                   { value: 5, name: '公开课', label: { show: true } },  
                   { value: 2, name: '私有课', label: { show: false } },
                   //此处label: { show: false }就是不让饼环图中间的数据改变,因为黑色消息窗可以改变,此处固定文本就行了.
               ]
           },
           {
               name: '总用户数',
               type: 'pie',
               radius: ['45%', '55%'],
               center: ['38%', '50%'],
               avoidLabelOverlap: false,
               label: {
                   normal: {
                       show: true,
                       position: 'center',
                       formatter: `{a}\n${50}`
                   },
                   emphasis: {
                       show: true,
                   }
               },
               data: [
                   { value: 18, name: '男', label: { show: true } },
                   { value: 30, name: '女', label: { show: false } },
                   { value: 2, name: '未知', label: { show: false } }
               ]
           },
           {
               name: '实验数',
               type: 'pie',
               radius: ['45%', '55%'],
               center: ['63%', '50%'],
               avoidLabelOverlap: false,
               label: {
                   normal: {
                       show: false,
                       position: 'center',
                       formatter: `{a}\n${18}`
                   },
                   emphasis: {
                       show: true,
                   }
               },
               data: [
                   { value: 12, name: '在线实验', label: { show: true } },
                   { value: 6, name: '非在线实验', label: { show: false } }
               ]
           },
           {
               name: '作业情况',
               type: 'pie',
               radius: ['45%', '55%'],
               center: ['88%', '50%'],
               avoidLabelOverlap: false,
               label: {
                   normal: {
                       show: false,
                       position: 'center',
                       formatter: `{a}\n${12}`
                   },
                   emphasis: {
                       show: true,
                   }
               },
               data: [
                   { value: 4, name: '准时提交', label: { show: true } },
                   { value: 8, name: '超时提交', label: { show: false } }
               ]
           }
       ]
   })
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要实现让echarts饼图中间文字固定居中,可以通过设置`graphic`组件来实现。具体操作如下: 1. 在`options`中添加`graphic`组件: ```javascript graphic: { type: 'text', top: 'center', left: 'center', style: { text: '中间文字', textAlign: 'center', fill: '#000', fontSize: 24 }, draggable: true } ``` 2. 设置`series`中的`label`和`emphasis`中的`label`为空,这样饼图上的文字就不会显示了: ```javascript series: [{ type: 'pie', data: [...], label: { show: false }, emphasis: { label: { show: false } } }] ``` 3. 监听饼图的`mouseover`和`mouseout`事件,在事件中改变中间文字饼图大小: ```javascript myChart.on('mouseover', function(params) { const { dataIndex } = params; const data = option.series[0].data[dataIndex]; const value = data.value; const name = data.name; myChart.setOption({ graphic: { style: { text: `${name}\n${value}`, fontSize: 32 } }, series: [{ radius: ['50%', '60%'] }] }); }); myChart.on('mouseout', function(params) { myChart.setOption({ graphic: { style: { text: '中间文字', fontSize: 24 } }, series: [{ radius: ['55%', '60%'] }] }); }); ``` 在这里,我们通过修改`graphic`组件的`style`来改变中间文字的内容和字体大小,通过修改`series`中的`radius`来改变饼图的大小。注意,这里的`radius`需要和饼图原本的`radius`有所不同,否则会出现饼图大小不变的情况。 完整代码如下: ```javascript const option = { graphic: { type: 'text', top: 'center', left: 'center', style: { text: '中间文字', textAlign: 'center', fill: '#000', fontSize: 24 }, draggable: true }, series: [{ type: 'pie', radius: ['55%', '60%'], data: [ { value: 335, name: 'A' }, { value: 310, name: 'B' }, { value: 234, name: 'C' }, { value: 135, name: 'D' }, { value: 1548, name: 'E' } ], label: { show: false }, emphasis: { label: { show: false } } }] }; const myChart = echarts.init(document.getElementById('main')); myChart.setOption(option); myChart.on('mouseover', function(params) { const { dataIndex } = params; const data = option.series[0].data[dataIndex]; const value = data.value; const name = data.name; myChart.setOption({ graphic: { style: { text: `${name}\n${value}`, fontSize: 32 } }, series: [{ radius: ['50%', '60%'] }] }); }); myChart.on('mouseout', function(params) { myChart.setOption({ graphic: { style: { text: '中间文字', fontSize: 24 } }, series: [{ radius: ['55%', '60%'] }] }); }); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值