【ECharts】ECharts框架想要做Sunburst的解决方法和拖拽功能的详解

简介: 【ECharts】ECharts框架想要做Sunburst的解决方法和拖拽功能的详解

Sunburst

要创建日出图表,需要在系列配置项中声明一系列类型“sunburst”,并在树结构中声明其数据:

var option = {
    series: {
        type: 'sunburst',
        data: [{
            name: 'A',
            value: 10,
            children: [{
                value: 3,
                name: 'Aa'
            }, {
                value: 5,
                name: 'Ab'
            }]
        }, {
            name: 'B',
            children: [{
                name: 'Ba',
                value: 4
            }, {
                name: 'Bb',
                value: 2
            }]
        }, {
            name: 'C',
            value: 3
        }]
    }
};

在这里插入图片描述

它由多层环图组成。在数据结构方面,内圈是外圈的父节点。因此,它不仅可以像饼图一样表示部分和整体的比例,还可以像矩形树形图一样表示层次关系。
在这里插入图片描述
默认情况下,使用全局调色板指定最内层的颜色,其他层的颜色与其父元素相同。在日出图表中,扇区块的颜色可以通过以下三种方式设置:
串联。data每个扇区块的样式在itemStyle中设置;
在系列中。levels设置itemStyle中每个层的样式;
在系列中,整个日出图表的样式设置为itemStyle。
以上三者的优先级从高到低,即系列。数据已配置itemStyle的扇区块将覆盖系列。级别ItemStyle和ItemStyle的系列设置。
接下来,我们将整体颜色设置为灰色“#aaa”,最里面的颜色设置为蓝色“蓝色”,Aa和B颜色设置为红色“红色”。`在这里插入代码片

   type: 'sunburst',
        data: [{
            name: 'A',
            value: 10,
            children: [{
                value: 3,
                name: 'Aa',
                itemStyle: {
                    color: 'red'
                }
            }, {
                value: 5,
                name: 'Ab'
            }]
        }, {
            name: 'B',
            children: [{
                name: 'Ba',
                value: 4
            }, {
                name: 'Bb',
                value: 2
            }],
            itemStyle: {
                color: 'red'
            }
        }, {
            name: 'C',
            value: 3
        }],
        itemStyle: {
            color: '#aaa'
        },

在这里插入图片描述
日出图是一个层次结构。为了便于配置相同的图层样式,我们提供了级别配置项。它是一个数组,其中项0表示向下钻取数据后返回到上层的图形,每个后续项表示从圆心到外层的级别。
例如,如果我们没有数据钻取功能,并且希望将最里面的扇区块的颜色设置为红色,将文本设置为蓝色,我们可以如下设置。
当鼠标移动到扇区块时,日出图表支持突出显示相关数据块。可以设置highlightPolicy,包括以下突出显示方法:
“descendant”(默认):突出显示鼠标移动的扇区块及其后代元素;
“祖先”:突出显示鼠标所在的扇区块及其祖先元素;
“self”:仅突出显示鼠标所在的扇区块;
“无”:其他元素不会被淡化。
上面提到的“高亮显示”将使用鼠标所在扇区块的强调样式;对于其他相关的扇区块,将使用高光样式。通过这种方式,可以很容易地实现突出显示相关数据的需要。
具体而言,对于配置项:

itemStyle: {
    color: 'yellow',
    borderWidth: 2,
    emphasis: {
        color: 'red'
    },
    highlight: {
        color: 'orange'
    },
    downplay: {
        color: '#ccc'
    }
}

在这里插入图片描述
在这里插入图片描述

拖拽

convertToPixel API用于将数据转换为像素坐标,从而可以获得每个点的位置,并绘制这些点。myChart。在语句convertToPixel('grid',dataItem)中,第一个参数'grid'表示dataItem在网格组件(即直角坐标系)中转换。所谓的“像素坐标”是指以容器的dom元素的左上角为零点的基于像素的坐标系中的坐标。
注意,这应该在第一个setOption之后完成,也就是说,只有在网格初始化convertToPixel('grid',dataItem)之后才能调用myChart
使用此代码,可以拖动多个点。接下来,为每个点添加拖动响应事件:

myChart.setOption({
    graphic: echarts.util.map(data, function (dataItem, dataIndex) {
        return {
            // 'circle' 表示这个 graphic element 的类型是圆点。
            type: 'circle',

            shape: {
                // 圆点的半径。
                r: symbolSize / 2
            },

            position: myChart.convertToPixel('grid', dataItem),

            // 这个属性让圆点不可见(但是不影响他响应鼠标事件)。
            invisible: true,
            // 这个属性让圆点可以被拖拽。
            draggable: true,
            // 把 z 值设得比较大,表示这个圆点在最上方,能覆盖住已有的折线图的圆点。
            z: 100,
            ondrag: echarts.util.curry(onPointDragging, dataIndex)
        };
    })
});

声明一个 graphic component,里面有若干个 type 为 'circle' 的 graphic elements。
这里使用了 echarts.util.map 这个帮助方法,其行为和 Array.prototype.map 一样,但是兼容 es5 以下的环境。
用 map 方法遍历 data 的每项,为每项生成一个圆点。
用 transform 的方式对圆点进行定位。position: [x, y] 表示将圆点平移到 [x, y] 位置。
这里使用了 convertToPixel 这个 API 来得到每个圆点的位置。
此圆点的拖拽的响应事件,在拖拽过程中会不断被触发。下面介绍详情。
这里使用了 echarts.util.curry 这个帮助方法,意思是生成一个与 onPointDragging
功能一样的新的函数,只不过第一个参数永远为此时传入的 dataIndex 的值。
在这里插入图片描述

myChart.setOption({
    ...,
    tooltip: {
        // 表示不使用默认的『显示』『隐藏』触发规则。
        triggerOn: 'none',
        formatter: function (params) {
            return 'X: ' + params.data[0].toFixed(2) + '<br>Y: ' + params.data[1].toFixed(2);
        }
    }
});

此时,完成了拖动的基本功能。但是,如果要在拖动过程中进一步实时查看拖动点的数据值更改,可以使用工具提示组件实时显示该值。然而,Tooltip有其默认的“显示”和“隐藏”触发规则,这在我们的拖放场景中不适用。因此,我们还需要手动自定义工具提示的“显示”和“隐藏”行为。

myChart.setOption({
    graphic: echarts.util.map(data, function (item, dataIndex) {
        return {
            type: 'circle',
            ...,
            onmousemove: echarts.util.curry(showTooltip, dataIndex),
            onmouseout: echarts.util.curry(hideTooltip, dataIndex),
        };
    })
});

function showTooltip(dataIndex) {
    myChart.dispatchAction({
        type: 'showTip',
        seriesIndex: 0,
        dataIndex: dataIndex
    });
}

function hideTooltip(dataIndex) {
    myChart.dispatchAction({
        type: 'hideTip'
    });
}

在 mouseover 的时候显示,在 mouseout 的时候隐藏。
此时,完成了拖动的基本功能。但是,如果要在拖动过程中进一步实时查看拖动点的数据值更改,可以使用工具提示组件实时显示该值。然而,Tooltip有其默认的“显示”和“隐藏”触发规则,这在我们的拖放场景中不适用。因此,我们还需要手动自定义工具提示的“显示”和“隐藏”行为。

相关文章
|
4月前
若依框架 --- echarts 封装
若依框架 --- echarts 封装
110 0
|
10月前
|
容器
layui框架实战案例(14):tabs选项卡切换时echarts拉伸变形无法正常显示的解决方案
layui框架实战案例(14):tabs选项卡切换时echarts拉伸变形无法正常显示的解决方案
102 0
|
4月前
|
Java BI 数据库
基于SSM框架实现面向小微企业的简历管理系统企业简历管理系统(分前后台spring+springmvc+mybatis+maven+jsp+css+echarts)
基于SSM框架实现面向小微企业的简历管理系统企业简历管理系统(分前后台spring+springmvc+mybatis+maven+jsp+css+echarts)
|
7天前
|
前端开发 JavaScript 定位技术
Docusaurus框架——react+antd+echarts自定义mdx生成图表代码解释文档
Docusaurus框架——react+antd+echarts自定义mdx生成图表代码解释文档
23 0
|
14天前
|
容器
echarts图表怎样实现刷新功能?
echarts图表怎样实现刷新功能?
|
4月前
|
移动开发 前端开发 JavaScript
用echarts实现一个简单的生成图表的功能
用echarts实现一个简单的生成图表的功能
18 0
|
10月前
|
定位技术
echarts引入百度地图通过脚本bmap.min.js解决关闭底图可点功能的底层解决方案
echarts引入百度地图通过脚本bmap.min.js解决关闭底图可点功能的底层解决方案
70 0
|
7月前
|
JavaScript
Vue使用Echarts折线图,实现点击播放、暂停、选择播放倍数;实现数据直播功能
Vue使用Echarts折线图,实现点击播放、暂停、选择播放倍数;实现数据直播功能
56 0
|
10月前
|
数据管理 PHP 容器
layui框架实战案例(2):LayUI表格与Echarts图表交互展示及PHP后台数据管理(搜索、翻页、动态显示)
layui框架实战案例(2):LayUI表格与Echarts图表交互展示及PHP后台数据管理(搜索、翻页、动态显示)
301 0
|
10月前
|
数据采集 数据可视化 前端开发
漏刻有时数据可视化大屏核心完整版框架PHP后台数据管理 API数据接口 Echarts图表库 自带电脑端和手机端两套模版且支持自定义前端模版开发
漏刻有时数据可视化大屏核心完整版框架PHP后台数据管理 API数据接口 Echarts图表库 自带电脑端和手机端两套模版且支持自定义前端模版开发
162 0