当前位置: 首页 > news >正文

探索 Echarts 绘图:数据可视化的奇妙之旅

目录

一、Echarts 初印象

二、搭建 Echarts 绘图环境

三、绘制第一个图表:柱状图的诞生

四、图表的美化与定制:让数据更具吸引力

1. 主题切换:一键变换风格

2. 颜色调整:色彩搭配的艺术

3. 标签与提示框:丰富信息展示

五、进阶应用:复杂图表的绘制与交互

1. 折线图与柱状图的组合:多维度数据展示

2. 地图可视化:地理数据的生动呈现

3. 交互功能:让图表 “动” 起来

六、总结与展望


在数据的海洋中,如何精准、高效且美观地呈现数据背后的信息至关重要。Echarts 作为一款强大的 JavaScript 可视化库,宛如一位神奇的画师,能够将枯燥的数据转化为生动直观、丰富多彩的图表,让数据 “开口说话”。今天,就让我们一同踏上 Echarts 绘图的探索之旅,领略其独特魅力与无限可能。

一、Echarts 初印象

Echarts 由百度团队精心打造并开源,以其丰富多样的图表类型、高度的定制性以及出色的交互性,在数据可视化领域崭露头角,成为众多开发者和数据分析师的得力助手。无论是简洁明了的柱状图、折线图,还是复杂精美的地图、雷达图,亦或是创意十足的词云图、漏斗图,Echarts 都能轻松驾驭,满足各种场景下的数据展示需求。其跨平台的特性,确保在不同的浏览器和设备上都能稳定运行,为用户带来流畅一致的可视化体验。

二、搭建 Echarts 绘图环境

开启 Echarts 之旅的第一步,便是搭建合适的绘图环境。我们可以通过多种方式引入 Echarts 库:

  • CDN 引入:在 HTML 文件的头部添加如下代码,即可快速引入 Echarts 核心库,方便快捷,适用于简单的项目和快速原型开发。

html

<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.2/dist/echarts.min.js"></script>

  • NPM 安装(适用于基于 Node.js 的项目):在项目目录下,通过命令行执行 npm install echarts --save,然后在 JavaScript 文件中使用 import * as echarts from 'echarts'; 引入,这种方式便于在大型项目中进行模块管理和版本控制,提升项目的可维护性。

引入 Echarts 库后,我们还需要在 HTML 页面中创建一个容器元素,用于承载即将绘制的图表:

html

<div id="chart-container" style="width: 800px; height: 600px;"></div>

三、绘制第一个图表:柱状图的诞生

有了环境基础,让我们从一个简单的柱状图开始,初窥 Echarts 的绘图奥秘。假设我们有一份某超市不同水果销量的数据:

javascript

var fruitData = {fruits: ['苹果', '香蕉', '橙子', '梨', '草莓'],sales: [30, 45, 20, 15, 35]
};

接下来,使用 JavaScript 代码初始化 Echarts 实例,并配置图表的各项参数:

javascript

// 基于准备好的 DOM,初始化 Echarts 实例
var myChart = echarts.init(document.getElementById('chart-container'));// 配置项
var option = {xAxis: {type: 'category',data: fruitData.fruits},yAxis: {type: 'value'},series: [{name: '水果销量',type: 'bar',data: fruitData.sales}]
};// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);

保存并运行 HTML 文件,瞧!一个直观清晰的柱状图便跃然眼前(如图 1),清晰地展示了不同水果的销量对比情况,让数据的差异一目了然。

图 1:

四、图表的美化与定制:让数据更具吸引力

Echarts 的强大之处不仅在于基础图表的绘制,更在于其丰富的定制选项,能够让我们根据实际需求和审美偏好,打造出独具个性、专业精美的图表。

1. 主题切换:一键变换风格

Echarts 内置了多种主题风格,如默认的经典主题、清新淡雅的 light 主题、酷炫深邃的 dark 主题等,只需简单配置,即可瞬间改变图表的整体视觉效果。例如,将上述柱状图切换为 dark 主题:

javascript

// 引入 dark 主题
echarts.registerTheme('darkTheme', {backgroundColor: '#2c343c',textStyle: {color: 'rgba(255, 255, 255, 0.8)'},// 其他主题相关配置项...
});// 使用 dark 主题绘制图表
myChart.setOption(option, {theme: 'darkTheme'
});

切换后的柱状图宛如披上了一层神秘的深色外衣(如图 2),在凸显数据的同时,营造出更加专业、沉稳的氛围,适用于特定的展示场景和视觉风格需求。

图 2:

2. 颜色调整:色彩搭配的艺术

色彩是图表中吸引眼球的关键元素之一。在 Echarts 中,我们可以轻松自定义图表元素的颜色,使其与品牌形象或展示主题相契合。比如,为柱状图的柱子设置渐变颜色,增强视觉冲击力:

javascript

series: [{name: '水果销量',type: 'bar',data: fruitData.sales,itemStyle: {color: new echarts.graphic.LinearGradient(0, 0, 0, 1,[{ offset: 0, color: '#87CEFA' },  // 起始颜色{ offset: 1, color: '#1E90FF' }   // 结束颜色])}}
]

经过色彩调整后的柱状图(如图 3),更加生动活泼,仿佛每一根柱子都蕴含着独特的魅力,让人眼前一亮,有效提升了数据的吸引力和可读性。

图 3:

3. 标签与提示框:丰富信息展示

为了让图表传达更多的信息,我们可以添加数据标签和提示框。数据标签直接显示在图表元素上,而提示框则在鼠标悬停时展示详细的数据内容,两者相辅相成,极大地增强了用户与图表的交互性和信息获取的便利性。

javascript

series: [{name: '水果销量',type: 'bar',data: fruitData.sales,label: {show: true,position: 'top',formatter: '{b}: {c} 斤'  // 在柱子上方显示水果名称和销量数据,并添加单位},tooltip: {trigger: 'item',formatter: '{a} <br/>{b}: {c} 斤'  // 鼠标悬停时显示图表名称、水果名称和销量数据}}
]

此时的柱状图(如图 4),不仅展示了数据的对比,还能让用户轻松获取每个数据点的具体数值,无论是快速浏览还是详细分析,都能满足需求,使数据的展示更加全面、深入。

图 4:

五、进阶应用:复杂图表的绘制与交互

掌握了基础图表的绘制和美化技巧后,让我们进一步探索 Echarts 的进阶功能,挑战更复杂的图表类型和交互效果,以应对多样化的数据可视化需求。

1. 折线图与柱状图的组合:多维度数据展示

在实际数据分析中,常常需要同时展示多个维度的数据趋势和对比情况。折线图和柱状图的组合便是一种常见且有效的方式。假设我们不仅有水果的销量数据,还有其对应的销售额数据,我们可以通过以下代码绘制出组合图表:

javascript

// 销售额数据
var revenueData = [400, 550, 300, 200, 450];var option = {xAxis: {type: 'category',data: fruitData.fruits},yAxis: [{type: 'value',name: '销量(斤)'},{type: 'value',name: '销售额(元)',position: 'right'}],series: [{name: '水果销量',type: 'bar',data: fruitData.sales},{name: '水果销售额',type: 'line',yAxisIndex: 1,  // 使用右侧的 y 轴data: revenueData}]
};myChart.setOption(option);

运行后得到的组合图表(如图 5),清晰地呈现了水果销量和销售额的变化趋势,通过不同的图表类型和坐标轴,将两组数据完美融合,使我们能够更全面、深入地洞察数据之间的关系,为决策提供更丰富的信息依据。

图 5:

2. 地图可视化:地理数据的生动呈现

Echarts 还支持强大的地图可视化功能,能够将地理数据以直观、生动的方式展现在地图上,为区域分析、市场分布等场景提供有力支持。以全国各省份的水果销量数据为例,我们可以绘制出如下的地图图表:

javascript

// 引入中国地图数据(需提前准备好相应的地图 JSON 文件)
$.get('china.json', function (chinaJson) {echarts.registerMap('china', chinaJson);var mapOption = {series: [{type: 'map',map: 'china',data: [{ name: '北京', value: 50 },{ name: '上海', value: 70 },// 其他省份数据...],label: {show: true,formatter: '{b}: {c}'}}]};var mapChart = echarts.init(document.getElementById('map-container'));mapChart.setOption(mapOption);
});

在这个地图图表(如图 6)中,各个省份根据水果销量数据被赋予了不同的颜色深度,直观地展示了销售数据在全国范围内的分布情况,让我们对地理区域上的数据差异有了更为直观、清晰的认识,仿佛开启了一场俯瞰全国水果销售版图的奇妙之旅。

图 6:

3. 交互功能:让图表 “动” 起来

Echarts 提供了丰富的交互功能,使用户能够与图表进行互动,更加深入地探索数据背后的信息。例如,我们可以为柱状图添加点击事件,当用户点击柱子时,弹出一个详细信息框展示该水果的更多数据:

javascript

myChart.on('click', function (params) {var fruit = params.name;var sales = params.value;var revenue = revenueData[fruitData.fruits.indexOf(fruit)];alert(fruit +'销量:' + sales +'斤,销售额:' + revenue +'元');
});

此外,还可以实现图表的缩放、平移、数据筛选等交互操作,让用户根据自己的需求灵活地查看和分析数据,真正实现人与数据的亲密对话,使数据可视化不再是静态的展示,而是充满活力和探索性的交互体验。

六、总结与展望

通过本次 Echarts 绘图的探索之旅,我们领略了其强大的功能和丰富的表现力。从基础图表的快速绘制,到个性化的美化定制,再到复杂图表的组合与交互应用,Echarts 为我们打开了一扇通往数据可视化新世界的大门。

在未来的数据分析和可视化领域,Echarts 必将继续发挥重要作用,随着技术的不断发展和创新,我们有理由期待它将带来更多令人惊喜的功能和特性,帮助我们更加深入、全面、生动地理解和呈现数据,挖掘数据背后隐藏的价值和规律,为决策提供更加精准、有力的支持。

希望本文能够激发您对 Echarts 的兴趣和探索欲望,让您在数据可视化的道路上勇往直前,创造出更加精彩、富有洞察力的图表作品,让数据在您的手中绽放出最耀眼的光芒!

相关文章:

探索 Echarts 绘图:数据可视化的奇妙之旅

目录 一、Echarts 初印象 二、搭建 Echarts 绘图环境 三、绘制第一个图表&#xff1a;柱状图的诞生 四、图表的美化与定制&#xff1a;让数据更具吸引力 1. 主题切换&#xff1a;一键变换风格 2. 颜色调整&#xff1a;色彩搭配的艺术 3. 标签与提示框&#xff1a;丰富信…...

网络基础(IP和端口)

网络连接的核心-TCP/IP体系结构&#xff08;IP和端口&#xff09; 什么是IP地址 1.IP地址是电子设备&#xff08;计算机&#xff09;在互联网上的唯一标识 2.用来在互联网中寻找电脑 IP 地址就像是你家的地址一样&#xff0c;不过它是在网络世界里用来找到一台电脑或者其他网…...

UE4与WEB-UI通信

前端HTML代码 <!DOCTYPE html><html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1"><title>test web ui</title><script src"https://cdn.b…...

前缀和与差分算法详解

定义 前缀和是一种数据预处理技术&#xff0c;它指的是从数组的第一个元素开始&#xff0c;到当前元素为止的所有元素的和。这种技术可以快速计算任意区间内元素的和&#xff0c;而不需要每次都从头开始累加。 差分则是前缀和的逆运算&#xff0c;它主要用于处理对数组某个区…...

《深入探究:C++ 在多方面对 C 语言实现的优化》

目录 一、C 在 C 上进行的优化二、C 关键字&#xff08;C 98&#xff09;三、C 的输入输出1. cin 和 cout 的使用2. cin、cout 和 scanf()、printf() 的区别 三、命名空间1. 命名空间的使用2. 嵌套命名空间3. 在多个头文件中使用相同的命名空间 四、函数缺省值1. 缺省值的使用2…...

React 第十六节 useCallback 使用详解注意事项

useCallback 概述 1、useCallback 是在React 中多次渲染缓存函数的 Hook&#xff0c;返回一个函数的 memoized的值&#xff1b; 2、如果多次传入的依赖项不变&#xff0c;那么多次定义的时候&#xff0c;返回的值是相同的,防止频繁触发更新&#xff1b; 3、多应用在 父组件为函…...

使用C#和OPenCV实现圆形检测

文章目录 霍夫变换使用 OpenCV 和 C# 实现圆形检测 霍夫变换 在计算机视觉中&#xff0c;圆形检测是一个常见且有用的任务&#xff0c;特别是在物体识别、图像分析和图形处理等领域。OpenCV 是一个强大的开源计算机视觉库&#xff0c;它提供了许多工具来实现不同的图像处理功能…...

评估一套呼叫中心大模型呼入机器人的投入回报比?

评估一套呼叫中心大模型呼入机器人的投入回报比&#xff1f; 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc 评估一套呼叫中心大模型呼入机器人的投入回报比&#xff08;ROI&#xff09;&#xff0c;是一个多…...

十八、Label 和 Selector

Label 是键值对,用来标识 Kubernetes 资源(如 Pod、Node、Service 等)的属性。它们并不直接影响资源的行为,但可以帮助用户快速组织、查询和操作这些资源。标签可以用于选择、过滤和分组。 Label: 标签对 k8s 中各种资源进行分类、分组,如Pod和节点进行分组。通过添加kev…...

实现按键按下(低电平)检测到下降沿

按照流程进行编程 步骤1&#xff1a; 初始化函数 包括时基工作参数配置 输入通道配置 更新中断使能 使能捕获、捕获中断及计数器 HAL_TIM_IC_Init(&ic_handle) //时基参数配置 HAL_TIM_IC_ConfigChannel(&ic_handle,&ic_config,TIM_CHANNEL_2) //输…...

解析 SSM 垃圾分类系统,助力生态平衡

前 言 垃圾分类系统&#xff0c;传统的垃圾分类系统模式还处于线下管理阶段&#xff0c;管理效率极低。随着垃圾分类系统信息的不断增多&#xff0c;传统基于线下管理模式已经无法满足当前用户需求&#xff0c;随着信息化时代的到来。通过该系统的设计&#xff0c;管理员可以管…...

软件工程 设计的复杂性

复杂性代表事件或事物的状态&#xff0c;它们具有多个相互关联的链接和高度复杂的结构。在软件编程中&#xff0c;随着软件设计的实现&#xff0c;元素的数量以及它们之间的相互联系逐渐变得庞大&#xff0c;一下子变得难以理解。 如果不使用复杂性指标和度量&#xff0c;软件…...

Nginx 限制只能白名单 uri 请求的配置

实际生产项目中&#xff0c;大多数时候我们会将后端的 http 接口通过前置 nginx 进行反向代理&#xff0c;对互联网用户提供服务。往往我们后端服务所能提供的接口服务是大于互联网用户侧的实际请求的接口地址数量的&#xff08;例如后端服务一共有100个api接口&#xff0c;经过…...

QT c++ 同时使用sqlite 和mysql数据库的问题

在项目开发中&#xff0c;同时使用了sqlite 和mysql数据库&#xff0c;分开这两部分运行功能都正常&#xff0c;但是一起运行&#xff0c;就异常&#xff0c;sqlite部分不能使用。 现象&#xff1a;出现如下提示 QSqlDatabasePrivate::addDatabase: duplicate connection nam…...

redis集群 服务器更换ip,怎么办,怎么更换redis集群的ip

redis集群 服务器更换ip&#xff0c;怎么办&#xff0c;怎么更换redis集群的ip 1、安装redis三主三从集群2、正常状态的redis集群3、更改redis集群服务器的ip 重启服务器 集群会down4、更改redis集群服务器的ip 重启服务器 集群down的原因5、更改redis集群服务器的ip后&#xf…...

【C++习题】19.数组中第K个大的元素

题目&#xff1a;数组中第K个大的元素 链接&#x1f517;&#xff1a;数组中第K个大的元素 题目&#xff1a; 代码&#xff1a; class Solution { public:int findKthLargest(vector<int>& nums, int k) {// 将数组中的元素先放入优先级队列中priority_queue<i…...

JIS-CTF: VulnUpload靶场渗透

JIS-CTF: VulnUpload来自 <https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/> 1,将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 靶机IP地址192.168.23.162&#xff0c;攻击机IP地址192.168.23.140…...

BGP-面试

简单介绍一下BGP BGP&#xff0c;边界网关协议&#xff0c;属于路径矢量路由协议。属于触发式更新或者增量更新。具有丰富的路由策略&#xff0c;能够灵活的进行路由选择。重心不是在路由学习&#xff0c;而是路由优选、更高效的传递路由和维护大量的路由信息。基于TCP&#xf…...

Git-安装与常用命令

目录 1.Git环境配置 1.1下载 1.2配置 1.2.1基本配置 1.2.2常用指令配置别名 1.2.3获取本地仓库 git命令在git bash中演示&#xff0c;会用到一些Linux命令。 1.Git环境配置 1.1下载 Git下载地址&#xff1a;https://git-scm.com/download 傻瓜式安装就可以了。 安装…...

回归预测 | Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习回归预测

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 回归预测 | Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习回归预测 模型设计 基于BiLSTM-Adaboost的回归预测模型结合了双向长短期记忆神经网络(BiLSTM)和Adaboost集成学习的…...

【EI复现】【基于改进粒子群算法求解】一种建筑集成光储系统规划运行综合优化方法附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询…...

手把手教你调用MiniMax API:快速集成聊天、语音合成到你的应用(Python示例)

手把手教你调用MiniMax API&#xff1a;快速集成聊天、语音合成到你的应用&#xff08;Python示例&#xff09; 在AI技术快速落地的今天&#xff0c;将大模型能力集成到自己的应用中已成为开发者的刚需。MiniMax作为国内领先的大模型服务提供商&#xff0c;其API平台提供了对话…...

大量频繁发起连接导致瀚高数据库进程被信号6杀死

文章目录环境症状问题原因解决方案环境 系统平台&#xff1a;银河麒麟 &#xff08;龙芯&#xff09; 版本&#xff1a;4.5.1 症状 数据库版本&#xff1a;瀚高安全版V4.5.1.2 介质 hgdb-see-4.5.1.2-ee53424.loongarch64.rpm 信号6的报错信息&#xff1a; 2025-04-18 08…...

网络和并发 第五节:Python中的多线程

一、线程的相关概念 在Python中,想要实现多任务除了使用进程,还可以使用线程来完成,线程是实现多任务的另外一种方式。 1、什么是线程 线程是进程中执行代码的一个分支,每个执行分支(线程)要想工作执行代码需要cpu进行调度 ,也就是说线程是cpu调度的基本单位,每个进…...

新手避坑指南:用STLink-V2给STM32F103RCT6烧录程序,从CubeMX配置到Keil调试全流程

STM32开发实战&#xff1a;从CubeMX配置到Keil调试的完整避坑手册 第一次接触STM32开发时&#xff0c;那种既兴奋又忐忑的心情我至今记忆犹新。看着手边的STLink-V2调试器和STM32F103RCT6开发板&#xff0c;明明按照教程一步步操作&#xff0c;却总在某个环节卡住——驱动死活装…...

为什么ResNet的152层比VGG16快?图解残差连接的计算优化与内存管理

为什么ResNet的152层比VGG16快&#xff1f;图解残差连接的计算优化与内存管理 在深度学习领域&#xff0c;网络深度与计算效率似乎总是一对矛盾体——直到ResNet的出现打破了这一认知。当152层的ResNet在ImageNet竞赛中以更低计算量击败16层的VGG时&#xff0c;整个计算机视觉…...

实战应用:基于快马平台构建支持高并发的医院预约系统后端服务

今天想和大家分享一个实战项目&#xff1a;基于InsCode(快马)平台构建医院预约系统后端服务的经验。这个系统需要处理高并发预约、确保数据一致性&#xff0c;还要对接短信通知等第三方服务&#xff0c;对代码健壮性要求很高。 系统架构设计 医院预约系统的核心是要解决"…...

Dunst未来发展方向:探索轻量级通知守护进程的创新路线图

Dunst未来发展方向&#xff1a;探索轻量级通知守护进程的创新路线图 【免费下载链接】dunst Lightweight and customizable notification daemon 项目地址: https://gitcode.com/gh_mirrors/du/dunst Dunst作为一款轻量级且高度可定制的通知守护进程&#xff0c;始终致力…...

C++编译产物为何在边缘端频繁触发OOM?深度解析.lto、.eh_frame、.comment段的隐藏开销(含Bloaty对比报告)

第一章&#xff1a;C编译产物在边缘端触发OOM的根本动因边缘设备普遍受限于物理内存&#xff08;如 512MB–2GB RAM&#xff09;、无 Swap 分区、缺乏内存过载保护机制&#xff0c;而现代 C 编译器&#xff08;如 GCC 11/Clang 14&#xff09;默认启用的优化策略与运行时特性&a…...

主流人脸识别算法框架实战选型指南:从精度、速度到资源消耗的权衡

1. 人脸识别算法框架的核心选型逻辑 第一次接触人脸识别项目时&#xff0c;面对琳琅满目的算法框架确实容易犯选择困难症。经过多个项目的实战验证&#xff0c;我发现选型本质上是在玩一个"不可能三角"游戏——精度、速度和资源消耗这三者永远无法同时达到最优。就像…...