Echarts饼图(下钻查询关联数据)两层关联数据嵌套

<script lang="ts" setup>
import * as echarts from 'echarts'
import { onMounted } from 'vue'

onMounted(() => {
  init()
})

function init() {
  // 基于准备好的dom,初始化echarts实例
  const myChart = echarts.init(document.getElementById('main'))

  // 城市学校总数 (测试数据,如果只需要单个无关联饼图可不写)
  const schoolData = [
    [
      {
        name: 'a',
        value: 4253
      },
      { name: 'b', value: 3623 },
      { name: 'c', value: 4368 },
      { name: 'd', value: 3681 }
    ],
    [
      { name: 'e', value: 3456 },
      { name: 'f', value: 4356 }
    ],
    [
      { name: 'g', value: 4536 },
      { name: 'h', value: 5221 },
      { name: 'i', value: 4361 }
    ],
    [
      { name: 'j', value: 4625 },
      { name: 'k', value: 5241 },
      { name: 'l', value: 5318 },
      { name: 'm', value: 3674 }
    ]
  ]
  
   // 城市下学习数量
  const area = [
    {
      name: '北京',
      value: 4
    },
    {
      name: '上海',
      value: 2
    },
    {
      name: '广州',
      value: 3
    },
    {
      name: '深圳',
      value: 4
    }
  ]
  // 指定图表的配置项和数据
  const option = {
    toolbox: {
      feature: {
        restore: { show: true, title: '返回' }
      }
    },
    title: {
      text: '城市学校学生总数',
      left: 'center'
    },
    tooltip: {
      trigger: 'item',
      formatter: '<br/>{b} : {c} ({d}%)'
    },
    legend: {
      orient: 'vertical',
      left: 'left',
      data: []
    },
    series: [
      {
        type: 'pie',
        radius: '65%',
        center: ['50%', '60%'],
        data: [{ value: 335, name: '' }]
      }
    ]
  }
  option.series = [
    {
      type: 'pie',
      radius: '65%',
      center: ['50%', '60%'],
      // data: area.map((v) => {
      //   return { name: v.name, value: v.value }
      // })
      data: area
    }
  ]
  option.legend.data = area.map((a) => a.name)

  myChart.setOption(option)
  // 点击饼图扇区触发事件 (只显示单个无关联饼图可不写)
  myChart.on('click', (params) => {
    if (params.name == '北京') {
      option.series = [
        {
          type: 'pie',
          radius: '65%',
          center: ['50%', '60%'],
          data: schoolData[0]
        }
      ]
      option.legend.data = schoolData[0].map((a) => a.name)
    }
    if (params.name == '上海') {
      option.series = [
        {
          type: 'pie',
          radius: '65%',
          center: ['50%', '60%'],
          data: schoolData[1]
        }
      ]
      option.legend.data = schoolData[1].map((a) => a.name)
    }
    if (params.name == '广州') {
      option.series = [
        {
          type: 'pie',
          radius: '65%',
          center: ['50%', '60%'],
          data: schoolData[2]
        }
      ]
      option.legend.data = schoolData[2].map((a) => a.name)
    }
    if (params.name == '深圳') {
      option.series = [
        {
          type: 'pie',
          radius: '65%',
          center: ['50%', '60%'],
          data: schoolData[3]
        }
      ]
      option.legend.data = schoolData[3].map((a) => a.name)
    }
    myChart.setOption(option)
  })
}
</script>

<template>
  <div id="main" style="height: 300px; align-content: center"></div>
</template>

效果示例:

点击查询关联数据:

 返回上一层:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值