数据可视化-ECharts Html项目实战(9)

在之前的文章中,我们学习了如何在ECharts中编写气泡图,词云图。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。

数据可视化-ECharts Html项目实战(8)-CSDN博客文章浏览阅读1.4k次,点赞45次,收藏33次。今天的文章,会正式进入ECharts气泡图与词云图的学习。希望我的文章能帮助到正在学习的你,也欢迎各位来本篇文章下一起交流学习,共同进步。https://blog.csdn.net/qq_49513817/article/details/137091165?spm=1001.2014.3001.5501今天的文章,会带着大家深入学习ECharts特殊图表中的雷达图,实现特殊效果的插入运用,函数的插入,以及多图表雷达图,希望你能在本篇文章中有所收获,如果你绘制的雷达图不好看,那么今天的文章一定会有所收获。

目录

一、知识回顾

二、雷达图

三、添加视觉映射组件的雷达图

四、多图表雷达图

拓展-视觉组件用法

一、知识回顾

在之前的文章中,我们学习了气泡图词云图,而它们的设置各有难点,例如气泡图的大量数据随机需要用到的函数设置,词云图的引入wordCloud模块

我们会使用到这样一组函数来进行我们的随机数生成,当然你可以根据这个基础写出任何你需要的函数,这并不是唯一的。

 

且虽然是写气泡图,这里的类型依旧设置成之前的scatter也就是散点图。

 这里的作用就是引入我们写词云图的一个模块,且类型(type)要设置成wordCloud。

前面的知识复习完了,我们开启今天的学习吧

二、雷达图

首先,我们先要知道雷达图主要用于展示多个变量或指标之间的相对关系和比较,这样在自己写图表的过程中就能根据需求选择我们的所用的图表。

其次,雷达图和饼图,圆环图等大部分圆形图一样,基本不用考虑x轴y轴的配置,也无需在工具箱中添加过多的转换图表类型的按钮,因为它用不上。雷达图的数据通常是一个包含多个对象的数组,每个对象代表一个数据系列,而饼图的数据结构通常是一个数组,数组的每个元素是一个对象。

最后,在雷达图的配置中,我们需要定义radar属性来设置雷达图的形状、大小等,并设置series中的type'radar'

现在,开始雷达图的编写吧:

<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="echarts.min.js"></script>
</head>
<body>
   <div id="main" style="width: 750px;height: 550px;"></div>
   <script type="text/javascript">
    var myChart = echarts.init(document.getElementById('main'));
    var option={
        title:{
            text:'销售能力对比分析',
            textStyle:{
                color:'red'
            },
            left:15,
            top:0
        },
		tooltip: { // 配置详情提示框组件
				confine: true, // 设置是否将tooltip框限制在图表的区域内
				enterable: true, // 设置鼠标是否可以移动到tooltip区域内
                formatter: "{a} <br/>{b} : {c} "
			},

            legend:{
            type:"scroll",
            data:['王斌','刘倩','袁波'],
            left:570,
            top:"bottom", 
        },
        radar: {  
            center:['50%','56%'],
            radius:225,
            
        // 雷达图指示器  
        indicator: [  
            { name: '销售', max: 100 },  
            { name: '沟通', max: 100 },  
            { name: '服务', max: 100 },  
            { name: '协作', max: 100 },  
            { name: '培训', max: 100 },  
        ],  
        name: {  
            textStyle: {  
                color: '#fff',  
                backgroundColor: '#999',  
                borderRadius: 3,  
                padding: [3, 5]  
            }  
        }  
    },  
    series: [  
        {  
            itemStyle: { // 设置折线拐点标志的样式
					emphasis: {
						lineStyle: {
							width: 5
						},
					} 
				},
            name: '代表数据',  
            type: 'radar',  
            data : [  
                {  
                    value : [87.50, 87.50, 90.00, 91.25, 85.00],  
                    name : '王斌'  
                },  
                {  
                    value :  [90.00, 88.75, 85.00, 87.50, 88.75], 
                    name : '刘倩'  
                },  
                {  
                    value : [92.50, 91.25, 88.75, 92.50, 91.25],  
                    name : '袁波'  
                },  
 
            ]  
        }  
    ]  
};  
    myChart.setOption(option);
   </script> 
</body>
</html>

 在代码中radius,是设置我们雷达图的大小

itemStyle配置项,它在雷达图中,可以用于调整数据点的颜色、大小等属性。它里面包括的

emphasis: {
    lineStyle: {
                width: 5
					},
				} 

就是我们的移动线条处,触发高亮效果。

数据类型也和之前不同,现在我们需要的是一个包含多个对象的数组。

现在,看看我们代码的运行效果吧

三、添加视觉映射组件的雷达图

添加视觉组件,我们需要用到visualMap配置项(visualMap 是 ECharts(一个使用 JavaScript 实现的开源可视化库)中的一个重要组件,主要用于进行数据的视觉映射。简单来说,它将数据映射到视觉元素上,通过改变这些视觉元素的表现(如颜色、大小、透明度等),使得数据的分布、大小、趋势等特征能够更直观地展现给用户。)

现在,我们写一个新的图表,并把visualMap运用在我们的代码中,将它变得更直观,好看:

       
       <!DOCTYPE html>
       <head>
           <meta charset="utf-8">
           <meta name="viewport" content="width=device-width, initial-scale=1.0">
           <title>Document</title>
           <script src="echarts.min.js"></script>
       </head>
       <body>
          <div id="main" style="width: 600px;height: 400px;"></div>
          <script type="text/javascript">
           var myChart = echarts.init(document.getElementById('main'));
           option = {
            backgroundColor:'rgba(204,204,204,0.7)',
            title: {
            text: '浏览器占比',
            subtext: 'Big Data',
            top: 20,
            left: 30                                               
            },
            tooltip: {
            trigger: 'item'
            },
            legend: {
            type: 'scroll',
            bottom: 10,
            data: (function () {
                var list = [];
                for (var i = 1; i <= 28; i++) {
                list.push(i + 2000 + '');
                }
                return list;
            })()
            },
            visualMap: {
            top: 'middle',
            right: 10,
            color: ['red', 'yellow'],
            calculable: true
            },
            radar: {
            indicator: [
                { text: 'IE8-', max: 400 },
                { text: 'IE9+', max: 400 },
                { text: 'Safari', max: 400 },
                { text: 'Firefox', max: 400 },
                { text: 'Chrome', max: 400 }
            ]
            },
            series: (function () {
            var series = [];
            for (var i = 1; i <= 28; i++) {
                series.push({
                type: 'radar',
                symbol: 'none',
                lineStyle: {
                    width: 1
                },
                emphasis: {
                    areaStyle: {
                    color: 'rgba(0,250,0,0.3)'
                    }
                },
                data: [
                    {
                    value: [
                        (40 - i) * 10,
                        (38 - i) * 4 + 60,
                        i * 5 + 10,
                        i * 9,
                        (i * i) / 2 ,
                    ],
                    name: i + 2000 + ''
                    }
                ]
                });
            }
            return series;
            })()
        };
        myChart.setOption(option);
   </script> 
</body>
</html>

在这个表中 ,我添加了

            legend: {
            type: 'scroll',
            bottom: 10,
            data: (function () {
                var list = [];
                for (var i = 1; i <= 28; i++) {
                list.push(i + 2000 + '');
                }
                return list;
            })()
            },

它 的作用是动态生成图例数据,最终它会输出我们2001到2028的图例数据,当我们有大量且连续的数字图例时(例如年月日),就可以使用这种方法添加图例。

以及

 visualMap: { <!-- 定义视觉映射组件 -->  
             top: 'middle', <!-- 设置视觉映射组件距离容器顶部的距离为中间位置 -->  
             right: 10, <!-- 设置视觉映射组件距离容器右侧的距离为 10 像素 -->  
             color: ['red', 'yellow'], <!-- 设置视觉映射的颜色范围为从红色到黄色 -->  
             calculable: true <!-- 允许用户手动调整颜色映射的范围 -->  
           }, 

让我们的数据更加好看。

现在,运行代码,看看效果:

 

可以很明显看到我们的映射效果,如果将visualMap配置项删掉,那么得到的图表就会像下面这样,让人一眼看去毫无波澜。

 最后,如果能将视觉组件在合适的时候添加到自己的图表中,那么对图表带来的的美观提升是巨大的。

四、多图表雷达图

在一个盒子中放多个图表,我们并不陌生,只需要设置好我们每个图表的大小,位置即可。

现在,编写代码:

<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="echarts.min.js"></script>
</head>
<body>
   <div id="main" style="width: 750px;height: 550px;"></div>
   <script type="text/javascript">
    var myChart = echarts.init(document.getElementById('main'));
    var option={
        title:{
            text:'多雷达图',
            textStyle:{
                color:'red'
            },
            left:15,
            top:0
        },
		tooltip: { // 配置详情提示框组件
				confine: true, // 设置是否将tooltip框限制在图表的区域内
				enterable: true, // 设置鼠标是否可以移动到tooltip区域内
                formatter: "{a} <br/>{b} : {c} "
			},

            legend:{
            type:"scroll",
            data:['王斌','刘倩','袁波','降水量','蒸发量'],
            left:400,
            top:"bottom", 
        },
        radar: [
            {  
        nameGap: 3,shape:'polygon',       
        // 雷达图指示器  
        indicator: [  
            { name: '销售', max: 100 },  
            { name: '沟通', max: 100 },  
            { name: '服务', max: 100 },  
            { name: '协作', max: 100 },  
            { name: '培训', max: 100 },  
        ],  
        name: {  
            textStyle: {  
                color: '#fff',  
                backgroundColor: '#999',  
                borderRadius: 3,  
                padding: [3, 5]  
            },  
        },  
        center:['40%','30%'],radius:135,
    }, 
    {  
        name:'图2',
        nameGap: 3,shape:'polygon',       
        // 雷达图指示器  
        indicator: (function(){
            var res = [];
            for (var i = 1;i  <= 12;i++){res.push({text:i+'月',max:100});}
            return res;
        })(),
        name: {  
            textStyle: {  
                color: '#fff',  
                backgroundColor: '#999',  
                borderRadius: 3,  
                padding: [3, 5]  
            },  
        } ,  
        center:['40%','78%'],radius:100,
    }, 
], 
    series: [  
        {  
            name:'图1',
            itemStyle: { // 设置折线拐点标志的样式
					emphasis: {
						lineStyle: {
							width: 5
						},
					} 
				},

            type: 'radar',  
            data : [  
                {  
                    value : [87.50, 87.50, 90.00, 91.25, 85.00],  
                    name : '王斌'  
                },  
                {  
                    value :  [90.00, 88.75, 85.00, 87.50, 88.75], 
                    name : '刘倩'  
                },  
                {  
                    value : [92.50, 91.25, 88.75, 92.50, 91.25],  
                    name : '袁波'  
                },  
            ]  
        },
        {
            radarIndex: 1, 
            type:'radar',
            tooltip:{trigger:'item'},
            itemStyle:{normal:{areaStyle:{type:'default'}}},
            data:[
                {name:'降水量',value:[5,6,9,56,69,73,77,88,50,22,7,5]},
                {name:'蒸发量',value:[3,5,8,34,45,77,68,65,36,23,7,4]},
            ]
        }  
    ]  
};  
    myChart.setOption(option);
   </script> 
</body>
</html>

多图表只需考虑我们的center位置radius大小,不要两表重叠 ,且图表配置项与数据单独编写最后使用radarIndex将图表数据对应即可。

radarIndex通常用在series的data数组中,每个数据项可以有一个radarIndex属性来指定它属于哪个雷达图。例如,在一个包含两个雷达图的图表中,你可以使用radarIndex:0来指定一个数据项属于第一个雷达图,radarIndex:1来指定它属于第二个雷达图。

现在看看图表效果

两个表上下排列在一起,没有出现重叠等冲突

今天的学习完成,快去练习吧~ 

拓展-视觉组件用法

配置项类型说明
typeString视觉映射类型,可选值为 'continuous'(连续型)和 'piecewise'(分段型)。连续型表示数据呈连续分布,可以使用渐变的颜色来表示不同数值之间的差异;分段型则将数据分成若干个区间,每个区间使用不同的颜色表示。
minNumber数据范围的最小值。对于连续型visualMap,该值定义了颜色映射的起始点。
maxNumber数据范围的最大值。对于连续型visualMap,该值定义了颜色映射的结束点。
inRangeObject在范围内的视觉映射配置。对于连续型visualMap,可以定义颜色渐变,如 { color: ['blue', 'red'] } 表示从蓝色渐变到红色。
textString/Array视觉映射的标签。可以定义文本标签,也可以定义多个标签用于分段型visualMap。
inverseBoolean是否反转颜色的渐变方向。默认为false,即颜色从最小值到最大值正常渐变;设置为true时,颜色会从最大值到最小值渐变。
rangeArray对于连续型visualMap,可以定义自定义的数据范围,如 [0, 100]
calculableBoolean是否显示拖拽条,允许用户手动调整数据范围。
orientStringvisualMap组件的布局朝向,可选值为'horizontal'(水平)和'vertical'(垂直)。
left/right/top/bottom/width/heightNumber/String这些属性用于设置visualMap组件在图表中的位置和大小。例如,left: 'center' 将组件水平居中。
splitNumberNumber对于分段型visualMap,该值定义了区间的数量。
itemWidth/itemHeightNumber对于分段型visualMap,定义了每个区间的宽度或高度。
itemStyleObject用于定义区间的样式,如颜色、边框等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue 文件下载

1.返回路径下载 注: 针对一些浏览器无法识别的文件格式&#xff08;如pdf、xls、ppt&#xff09;。可以直接在地址栏上输入URL即可触发浏览器的下载功能。 情况1 //地址栏输入文件URLwindow.location.href URLwindow.open(URL) 注:该方式将下载逻辑放在后端处理&#xff0c…

面试时如何回答接口测试怎么进行

一、什么是接口测试 接口测试顾名思义就是对测试系统组件间接口的一种测试&#xff0c;接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 …

权限提升-Linux系统权限提升篇VulnhubCapability能力LD_Preload加载数据库等

知识点 1、Web或用户到Linux-数据库类型 2、Web或用户到Linux-Capability能力 3、普通用户到Linux-LD_Preload加载so配合sudo 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 基础点 0、为什么我们要学习权限…

Python接口自动化 —— 什么是接口测试、为什么要做接口测试?

简介 上一篇和大家一起科普扫盲接口后&#xff0c;知道什么是接口&#xff0c;接口类型等&#xff0c;对其有了大致了解之后&#xff0c;我们就回到主题-接口测试。 什么是接口测试 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各…

C语言-冒泡排序算法

题目描述 设计一个程序&#xff0c;实现冒泡排序算法&#xff0c;并输出{9,8,7,6,5,4,3,2,1,0} 的排序过程。 输出 每个排序过程输出一行&#xff0c;直到排序完成。 样例输出 Expected 9 8 7 6 5 4 3 2 1 0 0 9 8 7 6 5 4 3 2 1 0 1 9 …

HDLbits 刷题 -- Always if

学习&#xff1a; An if statement usually creates a 2-to-1 multiplexer, selecting one input if the condition is true, and the other input if the condition is false. always (*) beginif (condition) beginout x;endelse beginout y;end end This is equivalent …

衍生品交易概况

场内 场外 交易台架构 报价、交易、研究、程序个股、股指Flow、Exotic线性、非线性 对冲管理 管理风险敞口 做好情景分析 尊重市场选择 及时调整策略 理解头寸 善于学习 场外衍生品交易员的一天 盘前 回顾市场、决定今天总体方向处理隔夜敞口 盘中 处理客户询价…

关于 HEAP CORRUPTION DETECTED:after Normal block 错误的原因及解析

目录 一、HEAP CORRUPTION DETECTED:after Normal block 出现的报错情况&#xff1a; 二、问题原因&#xff08;重要&#xff09;&#xff1a; 三、举例 1.错误代码如下&#xff1a; 2.错误原因及分析&#xff08;重要&#xff09;&#xff1a; 3.解决方法 ​编辑 4.正…

两数之和-考察哈希表的运用

题目 给定一个整数数组 n u m s nums nums和一个整数目标值 t a r g e t target target&#xff0c;请你在该数组中找出和为目标值 t a r g e t target target的那 两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同…

计算机网络数据链路层知识总结

物理层知识总结传送门 计算机网络物理层知识点总结-CSDN博客 功能 功能概述 一些基本概念 结点:主机、路由器链路﹔网络中两个结点之间的物理通道&#xff0c;链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。数据链路︰网络中两个结点之间的逻辑通道&a…

“数字化”持续走热,VR全景助力制造业上“云”

制造业要升级&#xff0c;数字化改造是重要途径。 早年间&#xff0c;由于对数字化的认识不足&#xff0c;一些企业明明有数字化改造需求&#xff0c;却不敢、不愿、不会上“云”。直到此次两会期间&#xff0c;2024年政府工作报告再次提出推动制造业数字化转型&#xff0c;越…

第十三届蓝桥杯JavaA组省赛真题 - 求和

解题思路&#xff1a; 这&#xff0c;真的是&#xff0c;省赛真题吗... public class Main {public static void main(String[] args) {long res 0;for (int i 1; i < 20230408; i) {res i;}System.out.print(res);} }

MYSQL——索引分类索引语法

索引分类 索引分类 在MySQL数据库&#xff0c;将索引的具体类型主要分为以下几类&#xff1a;主键索引、唯一索引、常规索引、全文索引。 当你在创建表的时候&#xff0c;给某个字段加上主键约束&#xff0c;实际上就是在这个字段上创建了一个主键索引。给某个字段加上唯一约…

​数据结构—栈操作经典案例

括号匹配&#xff1a; 这是我最开始写的&#xff0c;运行有问题 对于输入的括号序列&#xff0c;建议使用标准的 C 字符串而不是字符数组。 #include<iostream> using namespace std;typedef char SelemType; typedef int Status; #define OK 1 #define MAXSIZE 100 #…

Mysql数据库:故障分析与配置优化

目录 前言 一、Mysql逻辑架构图 二、Mysql单实例常见故障 1、无法通过套接字连接到本地MySQL服务器 2、用户rootlocalhost访问被拒绝 3、远程连接数据库时连接很慢 4、无法打开以MYI结尾的索引文件 5、超出最大连接错误数量限制 6、连接过多 7、配置文件/etc/my.cnf权…

element UI中设置图片的高度并支持PC和手机自适应

系列文章目录 一、elementui 导航菜单栏和Breadcrumb 面包屑关联 二、element UI左侧导航菜单栏与main区域联动 三、element UI中设置图片的高度并支持PC和手机自适应 文章目录 系列文章目录前言一、实现步骤设置图片的高度以适应不同的设备&#xff1a; 二、项目应用最终效…

【Laravel】06 数据库迁移工具migration

【Laravel】06 数据库迁移工具migration 1.migration文件目录2. 举例 1.migration文件目录 2. 举例 (base) ➜ example-app php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_crea…

学习笔记——C语言基本概念指针(下)——(8)

1.指针和数组 数组指针 -- 指向数组的指针。 指针数组 -- 数组的元素都是指针。 换句话理解就是&#xff1a;数组指针就是个指针&#xff0c;指针数组就是个数组。 1.1数组指针 数组指针&#xff1a;指向数组的指针&#xff1b; 先回顾一下数组的特点&#xff1a; 1.相…

最大连续1的个数 Ⅲ【滑动窗口】

文章目录 往期滑动窗口上上期&#xff1a;滑动窗口0.1分析0.2 暴力求解【超时】0.3 滑动窗口 上期&#xff1a; 滑动窗口1.1暴力哈希1.2滑动窗口 本期 往期滑动窗口 上上期&#xff1a;滑动窗口 0.1分析 这道题要求的是一个区间 是区间就有【第一个元素】 即起始位置 0.2 暴…