【数据可视化】Echarts的高级功能

news2024/11/15 8:15:04

个人主页 : zxctscl
如有转载请先通知

文章目录

  • 1. ECharts的图表混搭及多图表联动
    • 1.1 ECharts的图表混搭
    • 1.2 ECharts的多图表联动
  • 2. 动态切换主题及自定义ECharts主题
    • 2.1 ECharts 4.x/5.x中动态切换主题
    • 2.2 自定义ECharts主题
  • 3. ECharts中的事件和行为
    • 3.1 ECharts中的事件
      • 3.1.1 ECharts中鼠标事件的处理
      • 3.1.2 ECharts组件交互的行为事件
    • 3.2 代码触发ECharts中组件的行为
  • 4. 异步数据加载与显示加载动画
    • 4.1 ECharts中如何异步数据加载
    • 4.2 异步数据加载时如何显示加载动画

1. ECharts的图表混搭及多图表联动

为了使图表更具表现力,可以使用混搭图表对数据进行展现。
当多个系列的数据存在极强的不可分离的关联意义时,为了避免在同一个直角系内同时展现时产生混乱,需要使用联动的多图表对其进行展现。

1.1 ECharts的图表混搭

在ECharts的图表混搭中,一个图表包含唯一图例、工具箱、数据区域缩放模块、值域漫游模块和一个直角坐标系,直角坐标系可包含一条或多条类目轴线、一条或多条值轴线,类目轴线和值轴线最多上下左右共4条。

ECharts中支持任意图表的混搭,其中常见的图表混搭有折线图与柱状图的混搭、折线图与饼状图的混搭等。利用某地区一年的降水量和蒸发量数据绘制双y轴的折线图与柱状图混搭图表,

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>-图表混搭1</title>
    <script src="echarts.js"></script>
</head>

<body>
    <div id="main" style="width: 800px; height: 600px"></div>

    <script type="text/javascript">
        //基于准备好的dom,初始化ECharts图表
        let myChart = echarts.init(document.querySelector("#main"));
        let option = {  //指定图表的配置项和数据
            backgroundColor: 'rgba(128, 128, 128, 0.1)',  //rgba设置透明度0.1
            tooltip: {
                trigger: 'axis'
            },
            legend: {
                data: ['降水量', '蒸发量'],
                left: 'center',
                top: 12
            },
            xAxis: [
                {
                    type: 'category',
                    data: ['1月', '2月', '3月', '4月', '5月', '6月',
                        '7月', '8月', '9月', '10月', '11月', '12月']
                }
            ],
            yAxis: [
                {   //设置两个Y轴之1:降水量
                    type: 'value',
                    name: '降水量(mL)',
                    min: 0,
                    max: 250,
                    interval: 50,
                    axisLabel: {
                        formatter: '{value} '
                    }
                },
                {   //设置两个Y轴之2:蒸发量
                    type: 'value',
                    name: '蒸发量(mL)',
                    min: 0,
                    max: 200,
                    position: 'right',  //设置y轴安置的位置
                    offset: 0,  //设置向右偏移的距离
                    axisLine: {
                        lineStyle: {
                            color: 'red'
                        }
                    },
                    axisLabel: {
                        formatter: '{value} '
                    }
                }
            ],
            series: [
                {
                    name: '降水量',
                    type: 'bar',
                    itemStyle: {  //设置柱状图颜色
                        color: function (params) {  //注意:color的值支持函数,这里是一个函数,而不是一个函数立即调用
                            let colorList = [  //build a color map as your need
                                '#fe9f4f', '#fead33', '#feca2b', '#fed728', '#c5ee4a',
                                '#87ee4a', '#46eda9', '#47e4ed', '#4bbbee', '#4f8fa8',
                                '#4586d8', '#4f68d8', '#F4E001', '#F0805A', '#26C0C0'];
                            return colorList[params.dataIndex]
                        }
                    },
                    data: [50, 75, 100, 150, 200, 248, 220, 180, 155, 130, 90, 75]
                },
                {
                    name: '蒸发量',
                    type: 'line',
                    yAxisIndex: 1,  //指定使用第2个y轴
                    itemStyle: {
                        color: 'red'    //设置折线颜色
                    },
                    data: [58, 65, 90, 120, 130, 180, 150, 130, 125, 110, 150, 145]
                }
            ]
        };


        myChart.setOption(option);  //为echarts对象加载数据 
    </script>
</body>

</html>

如图所示。
在这里插入图片描述
在图表混搭代码中,数据中的yAxis数组中,通过代码position:‘right’指定Y轴安置的位置(如果没有指定position的值,那么默认安置位置为’left’);在series数组中,通过代码yAxisIndex:1,指定使用第2个Y轴(0代表第1个Y轴,1代表第2个Y轴)。
在这里插入图片描述
利用ECharts各图表的在线构建次数、各图表组件的使用次数、各版本下载和各主题下载情况的数据绘制柱状图与饼图混搭图表。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>5-2-柱状图和饼图混搭</title>
    <script src="echarts.js"></script>
</head>

<body>
    <div id="main" style="width: 800px; height: 750px"></div>
    <script type="text/javascript">
        //基于准备好的dom,初始化ECharts图表
        let myChart = echarts.init(document.querySelector("#main"));

        let builderJson = {
            "all": 10887,
            "charts": {  //各ECharts图表的json数据
                "地理坐标图": 3237,
                "路径图": 2164,
                "柱状图": 7561,
                "折线图": 7778,
                "饼图": 7355,
                "散点图": 2405,
                "K线图": 1842,
                "雷达图": 2090,
                "热力图": 1762,
                "矩形树图": 1593,
                "关系图": 2060,
                "盒须图": 1537,
                "平行坐标系": 1908,
                "仪表盘图": 2107,
                "漏斗图": 1692,
                "桑基图": 1568
            },
            "components": {  //各ECharts组件的json数据
                "地理坐标系组件": 2788,
                "标题组件": 9575,
                "图例组件": 9400,
                "提示组件": 9466,
                "直角坐标系组件": 9266,
                "图表标注组件": 3419,
                "图表标线组件": 2984,
                "时间线组件": 2739,
                "区域缩放组件": 2744,
                "视觉映射组件": 2466,
                "工具框组件": 3034,
                "极坐标系组件": 1945
            },
            "ie": 9743
        };

        let downloadJson = {  //各ECharts版本下载的json数据
            "完整版": 17365,
            "精简版": 4079,
            "常用版": 6929,
            "源代码版": 14890
        };

        let themeJson = {  //各ECharts下载的主题json数据
            "黑色主题": 1594,
            "信息主题": 925,
            "明亮主题": 1608,
            "罗马主题": 721,
            "马卡龙主题": 2179,
            "复古主题": 1982
        };

        let waterMarkText = 'ECharts';  //设置水印的字符
        let canvas = document.createElement('canvas');
        let ctx = canvas.getContext('2d');

        canvas.width = canvas.height = 100;
        ctx.textAlign = 'center';
        ctx.textBaseline = 'middle';
        ctx.globalAlpha = 0.08;
        ctx.font = '20px Microsoft Yahei';  //设置水印文字的字体
        ctx.translate(50, 50);  //设置水印文字的偏转值
        ctx.rotate(-Math.PI / 4);  //设置水印旋转的角度
        ctx.fillText(waterMarkText, 0, 0);  //设置填充水印

        let option = {  //指定图表的配置项和数据
            backgroundColor: {
                type: 'pattern',
                image: canvas,  //水印
                repeat: 'repeat'
            },
            tooltip: {},
            title: [{  //配置标题组件
                text: '在线构建次数',
                subtext: '总计 ' + Object.keys(builderJson.charts).reduce(function (all, key) {
                    return all + builderJson.charts[key];
                }, 0),
                left: '25%',
                textAlign: 'center'
            }, {  //配置标题组件
                text: '各图表组件的使用次数',
                subtext: '总计 ' + Object.keys(builderJson.components).reduce(function (all, key) {
                    return all + builderJson.components[key];
                }, 0),
                left: '25%',
                top: '53%',
                textAlign: 'center'
            }, {
                text: '各版本下载',
                subtext: '总计 ' + Object.keys(downloadJson).reduce(function (all, key) {
                    return all + downloadJson[key];
                }, 0),
                left: '75%',
                textAlign: 'center'
            }, {
                text: '主题下载',
                subtext: '总计 ' + Object.keys(themeJson).reduce(function (all, key) {
                    return all + themeJson[key];
                }, 0),
                left: '75%',
                top: '50%',
                textAlign: 'center'
            }],
            grid: [{  //配置网格组件
                top: 50,
                width: '50%',
                bottom: '50%',
                left: 10,
                containLabel: true
            }, {
                width: '50%',
                bottom: 0,
                top: '60%',
                left: 10,
                containLabel: true
            }],
            xAxis: [{  //配置x轴坐标系
                type: 'value',
                max: builderJson.all,
                splitLine: {
                    show: false
                }
            }, {
                type: 'value',
                max: builderJson.all,
                gridIndex: 1,
                splitLine: {
                    show: false
                }
            }],
            yAxis: [{  //配置y轴坐标系
                type: 'category',
                data: Object.keys(builderJson.charts),
                axisLabel: {
                    interval: 0,
                    rotate: 20
                },
                splitLine: {
                    show: false
                }
            }, {
                gridIndex: 1,
                type: 'category',
                data: Object.keys(builderJson.components),
                axisLabel: {
                    interval: 0,
                    rotate: 20
                },
                splitLine: {
                    show: false
                }
            }],
            series: [{  //配置数据系列
                type: 'bar',
                stack: 'chart',
                z: 3,
                label: {
                    position: 'right',
                    show: true
                },
                data: Object.keys(builderJson.charts).map(function (key) {
                    return builderJson.charts[key];
                })
            }, {
                type: 'bar',
                stack: 'chart',
                silent: true,
                itemStyle: {
                    color: '#eee'

                },
                data: Object.keys(builderJson.charts).map(function (key) {
                    return builderJson.all - builderJson.charts[key];
                })
            }, {
                type: 'bar',
                stack: 'component',
                xAxisIndex: 1,
                yAxisIndex: 1,
                z: 3,
                label: {
                    position: 'right',
                    show: true
                },
                data: Object.keys(builderJson.components).map(function (key) {
                    return builderJson.components[key];
                })
            }, {
                type: 'bar',
                stack: 'component',
                silent: true,
                xAxisIndex: 1,
                yAxisIndex: 1,
                itemStyle: {
                    color: '#eee'
                },
                data: Object.keys(builderJson.components).map(function (key) {
                    return builderJson.all - builderJson.components[key];
                })
            }, {
                type: 'pie',
                radius: [0, '30%'],
                center: ['75%', '25%'],
                data: Object.keys(downloadJson).map(function (key) {
                    return {
                        name: key.replace('.js', ''),
                        value: downloadJson[key]
                    }
                })
            }, {
                type: 'pie',
                radius: [0, '30%'],
                center: ['75%', '75%'],
                data: Object.keys(themeJson).map(function (key) {
                    return {
                        name: key.replace('.js', ''),
                        value: themeJson[key]
                    }
                })
            }]
        };
        
        myChart.setOption(option);  //为echarts对象加载数据 
    </script>
</body>

</html>

在这里插入图片描述
由图可知,由左边的两个柱状图和右边的两个饼图共同组成了一个混搭的图表。左边的两个柱状图分别表示在线构建的各种不同图表的次数和各图表组件的使用次数。
从左上角的柱状图中可以看出,折线图、柱状图和饼图3种图表最为常用;从左下角的柱状图中可以看出,在各种图表组件中,使用较多的图表组件分别有标题组件(title)、提示组件(tooltip)、图例组件(legend)和直角坐标系组件(grid)。
右边的两个饼图分别表示各种ECharts版本的下载情况的统计分析和各种主题(Themes)下载情况的统计分析。

1.2 ECharts的多图表联动

当需要展示的数据比较多时,放在一个图表进行展示的效果并不佳,此时,可以考虑使用两个图表进行联动展示。
ECharts提供了多图表联动(connect)的功能,连接的多个图表可以共享组件事件并实现保存图片时的自动拼接。多图表联动支持直角系下tooltip的联动。
实现EChart中的多图表联动,可以使用以下两种方法。
(1)分别设置每个ECharts对象为相同的group值,并通过在调用ECharts对象的connect方法时,传入group值,从而使用多个ECharts对象建立联动关系,格式如下。

myChart1.group = 'group1';  //给第1个ECharts对象设置一个group值
myChart2.group = 'group1';  //给第2个ECharts对象设置一个相同的group值
echarts.connect('group1');  //调用ECharts对象的connect方法时,传入group值

(2)直接调用ECharts的connect方法,参数为一个由多个需要联动的ECharts对象所组成的数组,格式如下。

echarts.connect([myChart1,myChart2]);

若想要解除已有的多图表联动,则可以调用disConnect方法,格式如下:

echarts.disConnect('group1');

在这里插入图片描述
利用某学院2019年和2020年的专业招生情况绘制柱状图联动图表,如图所示。
在这里插入图片描述

由图可知,共有上下两个柱状图,分别表示2019、2020两个年度的招生情况汇总。由于建立了多图表联动,所以当鼠标滑过2019年或2020年的人工智能专业柱体上时,系统会同时在2019年、2020年的人工智能专业上自动弹出相应的详情提示框(tooltip)。

在这里插入图片描述

利用某大学各专业2016-2020年的招生情况绘制饼图与柱状图的联动图表,如图所示。
由图可知,上方的饼图和下方的柱状图(柱状图也可以通过工具箱转为折线图)。当鼠标滑过饼图的某个扇区时,饼图出现的详情提示框显示相应扇区所对应年份的招生人数及其所占各年总招生人数的比例,同时柱状图(或折线图)也会相应地出现详情提示框,显示对应年份各个专业的招生人数的详细数据。
在这里插入图片描述

2. 动态切换主题及自定义ECharts主题

主题是ECharts图表的风格抽象,用于统一多个图表的风格样式。
为了顺应不同的绘图风格需求,需要下载ECharts官方提供的default、infographic、shine、roma、macarons、vintage等主题,并利用某大学各专业招生数据实现动态主题的切换。
此外,为了让图表整体换装,还需要制作自定义主题。

2.1 ECharts 4.x/5.x中动态切换主题

ECharts是一款利用原生JS编写的图表类库,ECharts为打造一款数据可视化平台提供了良好的图表支持。
在前端开发中,站点样式主题CSS是与样式组件的CSS样式分离的,这样可以根据不同的需求改变站点风格,如春节、中秋等节假日都需要改变站点风格。
顺应这种需求,百度ECharts团队提供了多种风格的主题。

切换ECharts 4.x/5.x主题的步骤如下。
(1)下载主题文件。在使用主题之前需要下载主题.js文件(在ECharts官网上下载官方提供的主题,如macarons.js,或自定义主题)。
(2)引用主题文件。将下载的主题.js文件引用到HTML页面中。注意,如果ECharts主题中需要使用到jQuery,那么还应该再在页面中引用jQuery的.js文件。
(3)指定主题名。在ECharts对象初始化时,通过init的第2个参数指定需要引入的主题名。如var myChart=echarts.init(document.getElementById(‘main’),主题名)。
在这里插入图片描述
利用某大学各专业招生情况绘制ECharts的shine主题柱状图,如图所示
由图可知,图形使用了3种不同的 灰度表示每个专业分别在2018年、2019年、2020年的招生情况。
在这里插入图片描述
在ECharts 4.x/5.x的shine主题柱状图代码中,首先引入主题的.js文件,同时,由于主题需要使用jQuery,所以也需要引入jquery-3.7.1.js文件。
最后,使用jQuery语句$(this).val()获得主题名称,在初始化ECharts实例时,通过init的第2个参数指定需要引入的主题。

2.2 自定义ECharts主题

ECharts除了默认主题样式之外,还可以使用主题在线构建工具,根据需求快速直观地生成主题配置文件,并在ECharts中使用自定义的主题样式。自定义主题的步骤如下。
(1)打开ECharts的主题构建工具,如图所示
在这里插入图片描述
(2)选择和配置主题。在ECharts的主题构建工具中,有十几套主题可以选择。如果这些主题还满足不了需求,那么还可以设置各种配置。ECharts提供了基本配置、视觉映射、坐标轴、图例、提示框、时间轴、数据缩放等各个模块的样式配置,配置形式相当丰富。对主题构建工具中的基本配置中的背景、标题、副标题等进行相应的配置,如图所示。

在这里插入图片描述
3)配置文件下载。在ECharts主题样式配置完成后,需要下载配置文件。单击主题构建工具页面左上角的“下载”按钮,弹出“主题下载”对话框中,如图所示,单击左边的“JS版本”选项卡,将其中的代码复制到所命名的“.js”格式的文件中保存。ECharts提供了“.js”“.json”两种格式的文件,主题下载时应该选择“.js”版本的配置文件。下载好“.js”格式的文件后,对“.js”格式的文件的使用与动态切换主题的方法相同。

在这里插入图片描述
为了便于二次修改,ECharts的主题构建工具支持导入、导出配置项,导出的配置可以通过导入恢复配置项。
导出的“.json”格式的文件仅用于在ECharts的主题构建工具中导入使用,而不能直接作为主题在ECharts页面中使用。

3. ECharts中的事件和行为

3.1 ECharts中的事件

事件是用户或浏览器自身执行的某种动作,如click、mouseover、页面加载完毕后触发load事件,都属于事件。
为了记录用户的操作和行为路径,需要完成鼠标事件处理和组件交互的行为事件的处理。

3.1.1 ECharts中鼠标事件的处理

响应某个事件的函数称为事件处理程序,也可称为事件处理函数、事件句柄。鼠标事件即鼠标操作点击图表的图形(如click、dblclick、contextmenu)或hover图表的图形(如mouseover、mouseout、mousemove)时触发的事件。
在ECharts中,用户的任何操作,都可能会触发相应的事件。在ECharts中,支持9种常规的鼠标事件,包括click、dblclick、mousedown、mousemove、mouseup、mouseover、mouseout、globalout、contextmenu。

其中,click事件最为常用。常规的鼠标事件及说明如表所示。
在这里插入图片描述
在一个图表元素上相继触发mousedown和mouseup事件,才会触发click事件。两次click事件相继触发才会触发dblclick事件。如果取消了mousedown或mouseup中的一个,click事件就不会被触发。如果直接或间接取消了click事件,dblclick事件就不会被触发。

利用某学院2020年专业招生情况绘制柱状图,如图所示
在这里插入图片描述
当点击添加鼠标单击事件的柱状图中的“人工智能”柱体后,弹出一个提示对话框,如上图所示。
单击提示对话框的确定按钮后,将自动打开相应的百度搜索页面,如下图所示。
在这里插入图片描述
在这里插入图片描述
在添加鼠标单击事件的柱状图代码中,通过on方法绑定鼠标的单击事件(click),鼠标事件包含一个参数params,通过params.name获得用户鼠标单击的数据名称,再通过window.alert方法弹出一个对话框,最后通过window.open方法自动打开一个新的搜索网页。
open方法至少带一个参数用于指定打开的新网页的网址,open方法还可带多个其他参数用于指定新打开网页的其他属性。
在这里插入图片描述

在ECharts中,所有的鼠标事件都包含一个参数params。params是一个包含单击图形的数据信息的对象,params中的基本属性及含义如表所示。
在这里插入图片描述
在这里插入图片描述
可通过console.log(params)函数在控制台打印出params参数的所有内容。
在这里插入图片描述
在这里插入图片描述

回调函数本身是主函数的一个参数,将回调函数作为参数传到另一个主函数中,当主函数执行完后,再执行回调函数。这个过程就叫作回调。在回调函数中获得对象中的数据名、系列名称,然后在数据中索引得到其它的信息后,再更新图表、显示浮层等。
利用产品销量和产量利润数据绘制柱状图,如图所示。
在这里插入图片描述

当单击左图中的第2件产品“羊毛衫”的“产量”柱体后,弹出一个提示对话框,如右图所示。
由右图可以得到左图中的第2件产品“羊毛衫”的“产量”柱体params参数的各属性信息。
在这里插入图片描述
在包含鼠标单击事件的参数params的柱状图代码中,可以通过调用回调函数,访问鼠标事件的参数params中的基本属性,如params.dataIndex、params.name、params.seriesName、params.value,在倒第数12、13行 显示出“第2件产品:羊毛衫产量为38”。
倒数第11行至倒数第2行代码 依次访问鼠标事件的参数params中的10种基本属性,并依次显示在图5-13的提示对话框中的每一行上。
注意,其中的params.data,params.dataType的值为undefined。

3.1.2 ECharts组件交互的行为事件

用户在使用交互的组件后触发的行为事件,即调用“dispatchAction”后触发的事件,如切换图例开关时触发legendselectchanged事件(这里需要注意,切换图例开关是不会触发legendselected事件的)、数据区域缩放时触发的datazoom事件等。
在ECharts中,基本上所有的组件交互行为都会触发相应的事件。
在这里插入图片描述
在ECharts中的交互事件及事件说明如表所示。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在包含鼠标单击事件的参数params的柱状图代码的基础上增加的新的一段代码,
在这里插入图片描述

添加图例选中事件,运行结果如图所示。
在这里插入图片描述

由图可以看出,用户的单击操作依次为“取消选中了图例–销量”→“取消选中了图例–产量”→“选中了图例–销量”→“选中了图例–产量”。
在这里插入图片描述
利用随机生成的300个数据绘制折线图与柱状图,如图所示。
由图可知,有上、下两个图表,两个图表使用相同的随机生成的300个随机数据。通过调用折线图的滚动鼠标,带动柱状图的图表同步变化,这主要是因为鼠标在折线图中滚动时,会产生dataZoom(数据区域缩放组件)事件。
在这里插入图片描述

3.2 代码触发ECharts中组件的行为

除了用户的交互操作,有时也需要在程序里调用方法并触发图表的行为,如显示tooltip、选中图例等。在ECharts 3.x和ECharts 4.x中,通过dispatchAction({ type: ’ ’ })触发图表行为,统一管理了所有动作,也可以根据需要记录用户的行为路径。

利用影响健康寿命的各类因素数据绘制圆环图,如图所示。

在这里插入图片描述
由图可知,在图中有以下动画效果。
(1)在高亮的扇区上显示tooltip。
(2)鼠标没有移入时,圆环图自动循环高亮各扇区。
(3)鼠标移入时,取消自动循环高亮,只高亮鼠标选中的那一个扇区。
(4)鼠标移出后,又恢复自动循环高亮各扇区。

在这里插入图片描述
在调用dispatchAction循环高亮圆环图的每个扇区的关键代码中主要通过dispatchAction({ type: ’ ’ })触发图表行为。在type: ’ ‘中,引号中的内容用于指定具体的行为,如’highlight’、‘downplay’、‘showTip’。在运行时,代码通过检测鼠标的行为调用相应的回调函数,myChart.on (‘mouseover’,function(param) )设置了鼠标移入时的动画效果,myChart.on(‘mouseout’, function(param) )设置了鼠标移出之后的动画效果。在代码中,设置了以下行为。
(1)type: ‘highlight’,高亮当前图形。
(2)type: ‘downplay’,取消之前高亮的图形。
(3)type: ‘showTip’,显示tooltip。
在这里插入图片描述

4. 异步数据加载与显示加载动画

Echarts中数据一般是在初始化后的setOption中直接填入的,但是很多时候数据需要使用异步模式进行数据加载。
如果数据加载时间较长,一个空的坐标轴放在画布上会让用户怀疑是否运行错误,此时需要使用一个loading动画来提示用户数据正在加载

4.1 ECharts中如何异步数据加载

ECharts中实现异步数据的加载的操作其实并不困难,在初始化图表后的任何时间内,都可以通过使用jQuery等工具实现异步数据加载,并通过setOption填入数据和配置项。
还可以通过先设置完图表样式,显示一个空的直角坐标轴后,再获取数据、填入数据,并显示图表的方式实现异步数据的加载。
异步加载各专业人数统计数据并绘制饼图,如图所示。
在这里插入图片描述
当异步加载数据时,需要配置Google浏览器以支持AJAX请求,具体操作如下。
(1)右键单击“Google Chrome”快捷方式图标,在弹出的快捷菜单中选择最下面的“属性”菜单项。
(2)在弹出的“Google Chrome属性”对话框中,在其中的“目标”文本框中添加“–allow-file-access-from-files”内容,再单击“确定”按钮,如图所示。
(3)打开Google浏览器。
(4)将网页文件拖放到打开的Google浏览器中。
在这里插入图片描述

4.2 异步数据加载时如何显示加载动画

ECharts默认提供了一个简单的加载动画,只需要在数据加载前,调用showLoading方法显示加载动画,在数据加载完成后,再调用hideLoading方法隐藏加载的动画即可。

当然,也可以根据需要使用showLoading方法自定义加载动画。异步加载某学院各专业男女生统计数据并绘制双柱状图,如图所示。
在这里插入图片描述
在自定义数据加载动画中,可根据需要定义提示的文字、文字的样式、effect(可选为:‘spin’‘bar’‘ring’‘whirling’‘dynamicLine’‘bubble’ ,必须引入echarts27-all.js才可设置effect属性)、自定义的数据加载动画蒙板颜色等属性。
左图为完成自定义的数据加载动画后得到的双柱状图,其数据加载动画效果如图所示。
在这里插入图片描述
在Echarts 5.x版本中,动画类型只有一种。
在这里插入图片描述
有问题请指出,大家一起进步!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1552628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot+vue+Mysql的财务管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

抓包工具和PyExeJs模块

文章目录 1. Fiddler1. 安装2. 使用1. 替换JS代码2. 其他使用 2. PyExecJS模块 1. Fiddler 1. 安装 点击下载 点击安装即可 2. 使用 配置https权限 1. 替换JS代码 devtool F12弹窗将script中src链接的JS文件替换成空的文件 2. 其他使用 2. PyExecJS模块

软件杯 深度学习+python+opencv实现动物识别 - 图像识别

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

计算机网络-RIP动态路由协议简介

一、概述 前面我们学习了动态路由协议按照工作机制及算法划分可以分为&#xff1a;距离矢量路由协议DV型和链路状态路由协议LS型。RIP就是典型的距离矢量路由协议&#xff0c;但是实际工作中用得已经比较少了。 距离矢量路由协议DV: RIP 链路状态路由协议LS: OSPF IS-IS 二、RI…

基于Spring boot + Vue协同过滤算法的电影推荐系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

每日一题--最长连续序列

洛阳春-岑参 人到洛阳花似锦&#xff0c;偏我来时不逢春。 谁道三冬无春色&#xff0c;冰山高处万里银 目录 题目描述 思路分析 方法及其时间复杂度 法一 暴力枚举&#xff1a; 法二 哈希表遍历&#xff1a; 法三 并查集&#xff1a; 个人总结 题目描述 128. 最长连续序…

使用pytorch构建一个无监督的深度卷积GAN网络模型

本文为此系列的第二篇DCGAN&#xff0c;上一篇为初级的GAN。普通GAN有训练不稳定、容易陷入局部最优等问题&#xff0c;DCGAN相对于普通GAN的优点是能够生成更加逼真、清晰的图像。 因为DCGAN是在GAN的基础上的改造&#xff0c;所以本篇只针对GAN的改造点进行讲解&#xff0c;其…

Day53:WEB攻防-XSS跨站SVGPDFFlashMXSSUXSS配合上传文件添加脚本

目录 MXSS UXSS&#xff1a;Universal Cross-Site Scripting HTML&SVG&PDF&SWF-XSS&上传&反编译(有几率碰到) SVG-XSS PDF-XSS Python生成XSS Flash-XSS 知识点&#xff1a; 1、XSS跨站-MXSS&UXSS 2、XSS跨站-SVG制作&配合上传 3、XSS跨站-…

第18次修改了可删除可持久保存的前端html备忘录

第17次修改了可删除可持久保存的前端html备忘录&#xff1a;增加年月日星期&#xff0c;增加倒计时&#xff0c;更改保存区名称可以多个备忘录保存不一样的信息&#xff0c;匹配背景主题&#xff1a;现代深色 <!DOCTYPE html> <html lang"zh"> <head&…

Radio Silence for mac 好用的防火墙软件

Radio Silence for Mac是一款功能强大的网络防火墙软件&#xff0c;专为Mac用户设计&#xff0c;旨在保护用户的隐私和网络安全。它具备实时网络监视和控制功能&#xff0c;可以精确显示每个网络连接的状态&#xff0c;让用户轻松掌握网络活动情况。 软件下载&#xff1a;Radio…

低功耗、低成本 NAS/公共文件夹 的可能性

使用现状&#xff1a;多台工作电脑&#xff0c;家里人手一台&#xff0c;还在两个住处 有好几台工作电脑&#xff0c;不同电脑不同OS有不同的用途&#xff0c;最大的问题就是各个电脑上文件的同步问题&#xff0c;这里当然就需要局域网里的公共文件夹&#xff0c;在NAS的问题上…

探索数据库mysql--------------mysql主从复制和读写分离

目录 前言 为什么要主从复制&#xff1f; 主从复制谁复制谁&#xff1f; 数据放在什么地方&#xff1f; 一、mysql支持的复制类型 1.1STATEMENT&#xff1a;基于语句的复制 1.2ROW&#xff1a;基于行的复制 1.3MIXED&#xff1a;混合类型的复制 二、主从复制的工作过程 三个重…

掌握Flutter底部导航栏:畅游导航之旅

1. 引言 在移动应用开发中&#xff0c;底部导航栏是一种常见且非常实用的用户界面元素。它提供了快速导航至不同功能模块或页面的便捷方式&#xff0c;使用户可以轻松访问应用程序的各个部分。在Flutter中&#xff0c;底部导航栏也是一项强大的功能&#xff0c;开发者可以利用…

Linux用户及用户组权限

一、用户和用户组 功能项命令实例作用用户组cat /etc/group查看当前系统存在的用户组groupadd testing添加一个新的用户组testingcat /etc/group查看组是否被新增成功groupmod -n test testing将testing重命名成testgroupdel test删除组testgroups root查看用户root所在的所有…

tdesign坑之EnhancedTable树形结构默认展开所有行

⚠️在官方实例中&#xff0c;树形结构的表格提供了2种方法控制展开全部节点&#xff1a; 一是通过配置属性tree.defaultExpandAll为true代表默认展开全部节点&#xff08;仅默认情况有效&#xff09;&#xff1b; 二是使用组件实例方法expandAll()可以自由控制树形结构的展开…

“直播曝光“有哪些媒体直播分流资源?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 我们线下举办活动时&#xff0c;往往希望活动进行更大的曝光&#xff0c;随着视频直播越来越被大众认可&#xff0c;甚至成了活动的标配&#xff0c;那么做活动视频直播的时候&#xff0…

R语言批量计算t检验,输出pvalue和均值

1.输入数据如下&#xff1a; 2.代码如下 setwd("E:/R/Rscripts/rG4相关绘图") # 读取CSV文件 data <- read.csv("box-cds-ABD-不同类型rg4-2.csv", stringsAsFactors FALSE)# 筛选出Type2列为指定五种类型的数据 filtered_data <- subset(data, …

LockSupport与线程中断机制

中断机制是个协商机制 Interrupt(): 将中断状态设置为true Interrupted():&#xff08;静态方法&#xff09; 1.返回当前线程的中断状态 2.将中断状态清零并设置为false is Interrupted(): 判断当前线程是否被中断 如何停止中断运行中的线程&#xff1f; 一个线程不应该由…

提取html工具封装和应用

提取html工具封装和应用 BeautifulSoup库和介绍BeautifulSoup使用BeautifulSoup重点方法BeautifulSoup其他方法 认证参数化实现创建json文件导包&#xff08;参数化&#xff09;编写测试用例技术难点--判断验证码不同 BeautifulSoup库和介绍 BeautifulSoup使用 1、导包 2、实例…

C# OpenCvSharp 轮廓检测

目录 效果 代码 下载 效果 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.…