Ehcarts饼图下钻实现

 首先说下原理吧,其实就是给数据重新赋值,然后重新刷新饼图而已

效果如下:

点击时提示

然后刷新数据,显示第二层数据

如果在第二层点击,则将数据重新赋值为第一层的,然后刷新

源码如下:

let data = [
    {name:"杭州-余杭",value:12},
    {name:"杭州-萧山",value:23},
    {name:"杭州-滨江",value:32},
    {name:"江苏",value:23}
]
// console.log(data)

let split = []
data.map(item=>{
    let query = {
        //-前的内容,即城市
        name: item.name.split('-')[0] == "杭州" ? item.name.split('-')[0] : item.name,
        //-后的内容,即城区
        unit: item.name.split('-')[0] == "杭州" ? item.name.split('-')[1] : item.name,
        value: item.value,
        level: 1
    }
    split.push(query)
})
console.log("刚开始遍历,城市和区域分离",split)

let hzAll = []
split.map(item=>{
    if(item.name == "杭州"){
        let query = {
            name:item.unit,
            value:item.value,
            level:2
        }
        hzAll.push(query)
    }
})
console.log("杭州下所有",hzAll)

let y = []
let c = {name:"",value:0,level:1}
y.push(c)
// y.name = "杭州"
// y.value = 0
for(i = 0;i<split.length;i++){
    // console.log(e[i].name)
    if(split[i].name == "杭州"){
        y[0].name = split[i].name
        y[0].value = y[0].value + split[i].value
    }
}
// console.log("杭州",y)

y.push(split[split.length-1])
console.log("杭州",y)


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

  // 指定图表的配置项和数据
var option = {
    title: {
    text: "主标题",
    subtext: "副标题",
    left: 'center'
    },
    tooltip: {
    trigger: 'item'
    },
    legend: {
    orient: 'vertical',
    left: 'left'
    },
    series: [
    {
        name: '区域',
        type: 'pie',
        radius: '50%',
        data:y,//数据
        emphasis: {
        itemStyle: {
            shadowBlur: 10,
            shadowOffsetX: 0,
            shadowColor: 'rgba(0, 0, 0, 0.5)'
        }
        }
    }
    ]
  };

  // 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);

myChart.on('click', function (event) {
    console.log(event,"事件")
    //如果在第一层,并且名字等于杭州
    if(event.data.level == 1 && event.data.name == "杭州"){
        alert("杭州,可以下钻")
        // console.log(option.series[0].data,"数据",hzAll,"杭州内全部")
        option.series[0].data = hzAll
        myChart.setOption(option)
    }
    //如果在第二层,则返回上层
    else if(event.data.level == 2){
        alert("返回上层!")
        option.series[0].data = y
        myChart.setOption(option)
    }
    //如果在第一层或者别的情况
    else{
        alert("此数据没有下钻!")
        option.series[0].data = y
        myChart.setOption(option)
    }
})

核心在于这一句了,给原有数据赋值,然后重新setOption;

至于onClick里面的条件,可以自行修改,楼主这里只是简单判断一下名称

option.series[0].data = hzAll; myChart.setOption(option)

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值