Echarts 嵌套饼图实现,内环点击控制外环显示

Echarts有交互事件,但是如果用其进行图形变更,恐怕就只有重新修改配置了、

如图,我想要实现,内圈的数据控制外圈的图形,当点击内环的某一块时,就可以实现,更改外环的目的。

起初我想能不能直接修改option里 series的data数据达到修改的外圈图形的效果,可惜没那么那么容易,我暂时想到的修改实现方法,设置option的,达到修改外圈的目的。废话不多说,上代码:

<script>
    var dataA=[];
    var option = {
        tooltip : {
            trigger: ‘item‘,
            formatter: "{a} <br/>{b} : {c} ({d}%)"
        },
        legend: {
            orient : ‘vertical‘,
            x : ‘left‘,
            data:[‘直达‘,‘营销广告‘,‘搜索引擎‘,‘邮件营销‘,‘联盟广告‘,‘视频广告‘,‘百度‘,‘谷歌‘,‘必应‘,‘其他‘]
        },
        toolbox: {
            show : true,
            feature : {
                mark : {show: true},
                dataView : {show: true, readOnly: false},
                magicType : {
                    show: true,
                    type: [‘pie‘, ‘funnel‘]
                },
                restore : {show: true},
                saveAsImage : {show: true}
            }
        },
        calculable : false,
        series : [
            {
                name:‘访问来源‘,
                type:‘pie‘,
                selectedMode: ‘single‘,
                radius : [0, 70],

                // for funnel
                x: ‘20%‘,
                width: ‘40%‘,
                funnelAlign: ‘right‘,
                max: 1548,

                itemStyle : {
                    normal : {
                        label : {
                            position : ‘inner‘
                        },
                        labelLine : {
                            show : false
                        }
                    }
                },
                data:[
                    {value:335, name:‘直达‘},
                    {value:679, name:‘营销广告‘},
                    {value:1548, name:‘搜索引擎‘}
                ]
            },
            {
                name:‘访问来源‘,
                type:‘pie‘,
                radius : [100, 140],

                // for funnel
                x: ‘60%‘,
                width: ‘35%‘,
                funnelAlign: ‘left‘,
                max: 1048,

                data:dataA
                /*[
                   {value:335, name:‘直达‘},
                    {value:310, name:‘邮件营销‘},
                    {value:234, name:‘联盟广告‘},
                    {value:135, name:‘视频广告‘},
                    {value:1048, name:‘百度‘},
                    {value:251, name:‘谷歌‘},
                    {value:147, name:‘必应‘},
                    {value:102, name:‘其他‘}
                ]*/
            }
        ]
    };
    var data=[];
     data[0]=[
        {value:335, name:‘直达‘},
        {value:310, name:‘邮件营销‘}

    ];
     data[1]=[

        {value:234, name:‘联盟广告‘},
        {value:135, name:‘视频广告‘}

    ];
    data[2]=[
        {value:1048, name:‘百度‘},
        {value:251, name:‘谷歌‘},
        {value:147, name:‘必应‘},
        {value:102, name:‘其他‘}];

    // 路径配置
    require.config({
        paths: {
            echarts: ‘www/js‘
        }
    });
    var myChart;
    require([‘echarts‘,‘echarts/chart/pie‘,‘echarts/chart/funnel‘],function(echarts){
         myChart = echarts.init(document.getElementById(‘main‘));
        // 使用刚指定的配置项和数据显示图表。

        myChart.setOption(option);
        // 处理点击事件并且跳转到相应的百度搜索页面
        myChart.on(‘click‘, function (params) {

            console.log(params);

            if(params.seriesIndex==0){

                for(var i=0;i<option.series[0].data.length;i++){
                    option.series[0].data[i].selected=false;
                }
                var selected=params.data;
                selected.selected=true;
                console.log(selected);
                console.log( option.series[0].data[params.dataIndex]);
                option.series[0].data[params.dataIndex]=selected;
              //  option.series[1].data=dataA;
                option.series[1].data=data[params.dataIndex];
                console.log(option);
                myChart.clear();
                myChart.setOption(option);
            }

        });
    });
</script>

  如上,为了点击切换图形,网上有人,写多个option,如何option1,option2……,通过点击事件的选择,然后切换option,但是写那么多option真的很浪费资源,他的很多属性是重复的,所以我决定更改option的内容,然后达到切换目的。

现在详细说明:
myChart.on(‘click‘, function (params){
   if(params.seriesIndex==0){

}
});

  如上,设置点击事件通过seriesIndex的值,判断是内圈还是外圈,点击事件发生在内圈,则进行修改;通过dataIndex的值,判断它是点击的哪一个块,然后进行操作。我先预先把数据加载好做成一个数组,然后我们通过选择的索引,达到匹配数据。如果我们直接复制,不进行myChart.clear();这一步的操作,会出现数据交叉的问题,所以我们需要先清空图形数据,然后执行其myChart.setOption(option);的方法,执行完之后,图形重新加载了,会出现,点击选中的的图形,没有选中,所以需要设置选中的图形,在设置之前,把之前这只选中的图形,全部设置不选中,故达到目的。

感兴趣的朋友可以参考代码进行实现,如果你有更好的方法实现,不吝赐教。
时间: 2024-11-25 00:10:16

Echarts 嵌套饼图实现,内环点击控制外环显示的相关文章

robotium脚本封装为APK,实现脱离手机数据线,使用按钮点击控制用例运行的小功能

最近一直在完成一些robotium的小功能,用来更方便的完成一些小功能的测试,或者可以说用来娱乐吧,幸得群内大神思路指点,就此引申,终于把这个功能得以实现 ---------------将robotium脚本封装为APK,使用按钮控制用例运行覆盖程度,测试结果以简单的xml文件输入到手机SD卡目录下---------------------- 废话不多说,转正题: 一.首先明确一点,这篇文章,是在你所编写的robotium脚本运行无异常的前提下实施 二.阐明思路: 1.我们需要一个运行良好的,逻

Echarts制作饼图在数值后面加上单位

通过echarts制作饼图,鼠标移动到对应的扇形看到数值和百分比,怎样在数值后面加上单位呢,例如 任务分配:15.498155分钟(34.23%),series.data 数组里只有value和name,这个“分钟”单位怎样加呢? tooltip有手动formatter的方法,你想变成啥样就啥样 或者: 效果图如下:

ECharts 环形饼图 动态获取json数据

ECharts  环形饼图 动态获取json数据 效果图如下: 一.html部分 <div id="secondPieChart" style="width:100%; height:400px;"></div> 二.js部分 <script type="text/javascript"> function loadOneColumn() {     var myChart = echarts.init(doc

点击Div,显示其innerHTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

MyEclipse导入主题文件epf后xml及jsp等页面中点击标签之后显示灰白

MyEclipse导入主题文件epf后xml及jsp等页面中点击标签之后显示灰白,症状如下: 解决方案如下: MyEclipse导入主题文件epf后xml及jsp等页面中点击标签之后显示灰白,布布扣,bubuko.com

添加数据源,管理工具--数据源(ODBC),点击添加不显示该驱动

win7系统下或者64位系统下,安装完mysql-connector-odbc驱动后,直接进入:管理工具--数据源(ODBC),点击添加不显示该ODBC驱动 问题解决如下: C:\Users\Administrator>cd\windows\SysWOW64 C:\windows\SysWOW64>odbcad32 回车弹出 ODBC数据源管理器,在此窗口下进行添加操作即可看到:MySQL ODBC 5.1 Driver,点击完成,进行后续操作,完成添加操作,图示如下:

基于jQuery点击淡入淡出显示图片特效

分享一款基于jQuery点击淡入淡出显示图片特效.这是一款基于jQuery+CSS3实现酷炫效果的图片切换特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <center><p style="color:#334960">点击图标进行展示</p></center> <div class="main"> <div id="coolShow"><

控制echo显示字体的颜色和效果

控制echo显示字体的颜色和效果 echo要变换颜色或显示效果的时候,要使用参数-e 格式:  echo -e "\033[字体颜色;字体背景颜色;字体显示效果m字符串\033[0m" 字体颜色.字体背景颜色.字体显示效果的位置可以互换. \033[;m 是对字体颜色或效果调用的开始 \033[0m 表示关闭对属性的调用 字背景颜色范围:40----49  40:黑 41:深红 42:绿 43:*** 44:蓝色 45:紫色 46:深绿 47:白色 字颜色:30-----------3

ffmpeg加文字水印并控制水印显示时间或显示周期

#以下脚本保存成.sh文件运行,不会出现中文乱码问题 网上查到用enable关键字控制,实际是draw #加水印 水印位置由x,y,w,h来控制 #ffmpeg编译时需--enable-libfreetype才能用此功能 #!/bin/bash ffmpeg -y -i jiushu.mpg -acodec libfaac -b:a 30k -ar 44100 -r 15 -ac 2 -s 480x272 -vcodec libx264 -refs 2 -x264opts keyint=150: