在项目中,关于前端实现数据可视化的技术选择

news2025/1/13 10:42:38

前言

        在项目中,数据可视化以图表、报表类型为主。

需求背景

  • 技术框架是Vue2.x版本,组件库是Ant Design of Vue
  • 能够支撑足够多的图表类型开发
  • 图表大小/位置能够随意变动
  • 图表样式需要支持丰富多样的用户配置
  • 强大、开放的图表语法支持复杂的数据可视化场景
  • 兼顾电脑端和手机端、同时兼顾开发周期和后期维护
  • 版本稳定、社区活跃,方便定位问题和解决
  • 有大屏需求

Ant Design是蚂蚁金服开源的企业级 UI 设计React 组件库。而Ant Design of Vue 是第三方将 Ant Design 的组件库转换为 Vue 组件,便于开发者在 Vue 框架中使用。

Echarts

        特点:配置式开发,也就是绘制图表理论上不需要编写代码(除了初始化),只需要提供一个配置对象即可,所有的内容都可以通过配置调整。

        优点:

  • 百度开源、开箱即用、功能强大、社区活跃、文档丰富、版本迭代积极
  • 衍生开发、配置丰富、扩展丰富(可以画出各种炫酷效果makeapie echarts社区图表可视化案例)
  • 支持按需求打包(echarts.js官网提供了在线构建的工具,可以在线构建项目时,选择项目所需要使用到的模块,从而达到减小JS文件的体积)
  • 支持中国地图功能

        缺点:

  •  PC端大数据量体验较差
  • 移动端缺陷凸出(卡顿、部分PC功能不支持、触摸事件鬼畜等)
  • echarts.js的体积较大(一个基础的echarts.js都要400K左右,相对于D3.js和hightcharts.js来说都是比较大的)
  • echarts.js的可定制性差(说到echarts.js的定制性差,其实不止是包括echarts.js/hightcharts.js也是如此,因为这一类型的数据可视化框架主要是高度的进行分装,所以你在使用的时候只需要设置一下配置就可以了,但是如果是出现了要绘制配置中不支持的图表怎么办,那么你就只能放弃,尝试着使用其他的框架了)
  • 高度封装的组件库,没办法拿来再二次封装

AntV

        AntV 是蚂蚁金服开源的数据可视化解决方案。基于项目的业务需求,我考虑了以下Antv旗下三个开源库:

  •         G2
  •         G2Plot
  •         Ant Design Charts

        我们先讲讲三者的区别:

        G2

         G2 作为底层依赖,使用了图形语法。

         可以看到它的实现都是通过函数风格式、声明形式的 API 和组件化的编程范式来完成的:

         优点:功能强大

         缺点:上手难

        G2Plot

        全面依赖 G2,G2Plot 层仅仅是基于 G2 强大的图形、交互、事件、动画能力,一图一做的扩展不同的常见业务图表,开箱即用、易于配置。

        优点:上手简单,配置简单

        

        Ant Design Charts

        Ant Design Charts 是 G2Plot 的 React 版本,基于 React 封装了 G2Plot,无需感知destroy()、update() 等函数,只需关系 data 和 config,功能和 G2Plot 保持一致。

        新版本的Ant Design Charts甚至不局限于 G2Plot,目前已经在 G6 的基础封装了部分流程图、组织架构图等,后续还会接入 L7 (地理可视化) 等图表库。

        总而言之,G2Plot和Ant Design Charts可以理解为基于G2的实现。

        那么蚂蚁金服这几套技术框架的优缺点是啥?

        G2优点:自由度较高:由可视化理论做基础,没有类似 Echart 的 chart 概念,可用“可视化语法”绘制想要的图表,非常灵活。

        例如一根堆积柱形图的坐标系由笛卡尔坐标系改为极坐标系,堆积柱形图就变为了圆环图。

        代码复用率较高:因其有一套完善的可视化语法,所以团队或公司可根据自己的 UI 需求,用 g2 做底层库,封装自己的 charts 库。

        缺点:产品成熟度一般、社区也不活跃、大屏需要定制化开发,有一定开发门槛;组件库需前端编码实现数据绑定,若需拖拽式等功能需要额外开发(没有暴露resize方法);最重要的是很难!

        G2Plot和Ant design Charts优缺点与Echarts差不多。

HighCharts

        语法也是和 ECharts 差不多的配置式。

        它的优点是它有详细的文档,示例和详细的 CSS,产品稳定性好,缺点是商用版付费

        这个付费直接让我pass了它

D3

        非常著名的交互式绘图引擎,也算是偏底层绘图的库,类似于 G2

        开源的JavaScript函数库。很多其他的库都是基于它所开发,功能十分强大,灵活性也高,支持 HTML、SVG 和 CSS。

        优点:相当于武侠世界里的绝世内功,学会了它,就可以使出十八般武艺。各种定制化的可视化图表都可以轻松完成。

        缺点:难。需要 web 技术、可视化理论、数学逻辑。

        低版本的IE浏览器中图形无法正常显示

最终采用

        要商用,首先淘汰了HighCharts

        没有可视化开发基础。淘汰了D3和G2

        用的Vue不是React,淘汰了Ant Design Charts

        因为需要快速上手、绘制的图表没有夸张的个性化定制,Echarts和G2Plot进入决赛

        考虑到版本稳定和社区活跃,同时翻阅了Echarts的扩展画廊,发现Echarts还是有蛮多花里胡哨的实现,最后选择了Echarts

        但是移动端的问题最后还是踩坑了,但是我最后想出解决的方法,请看本专栏的另外一篇推文

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

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

相关文章

「UG/NX」Block UI 指定平面SpecifyPlane

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

linux内核分析:线程和进程创建,内存管理

lec18-19:进程与线程创建 lec20-21虚拟内存管理 内核代码,全局变量这些只有一份,但是内核栈有多份,这可能就是linux线程模型1对1模式的由来。通过栈来做的 x86 CPU支持分段和分页(平坦内存模式)两种 分段,选择子那里就有特权标记了

C#教师考勤管理系统asp.net+sqlserver

3.3.1 员工部分 1:请假管理:包括填写请假条,提交申请,查看审批,审核请假等等。 2:考勤管理:针对具体的员工考勤的统计等管理。 3:个人资料管理:进行个人信息管理&#xf…

接口测试——接口协议抓包分析与mock_L1

目录: 接口测试价值与体系常见的接口协议接口测试用例设计postman基础使用postman实战练习 1.接口测试价值与体系 接口测试概念 接口:不同的系统之间相互连接的部分,是一个传递数据的通道接口测试:检查数据的交换、传递和控制…

每日一博 - WebHook vs Polling

文章目录 概述图解 概述 下面的图表显示了轮询和Webhook之间的比较。 假设我们运行一个电子商务网站。客户通过API网关将订单发送到订单服务,然后订单服务将订单传递给支付服务进行支付交易。支付服务然后与外部支付服务提供商(PSP)通信&am…

Python 列表的下标索引

视频版教程 Python3零基础7天入门实战视频教程 我们可以通过列表的下标索引获取列表元素。 下标索引从0开始,第一个元素下标索引是0,第二个元素下标索引是1,…第N个元素下标索引是N-1 举例: # 定义一个有多元素的列表 list1 …

数据库系统外部的体系结构

单用户结构主从式结构分布式结构客户机/服务器结构(C/S结构)浏览器 / 服务器结构(B/S结构)感谢 💖 上一篇文章 数据库系统的三级模式和二级映射介绍的是数据库系统内部的体系结构,是从应用开发…

端口敲击守护程序之DC-9

OSCP系列靶场-Intermediate-DC-9 目录 OSCP系列靶场-Intermediate-DC-9总结准备工作信息收集-端口扫描目标开放端口收集目标端口对应服务探测 信息收集-端口测试80-HTTP端口的信息收集信息收集-网站指纹漏洞利用-网站指纹(无)信息收集-HTML隐藏信息查看信息收集-目录扫描信息收…

C语言 —— 初步入门知识(内存、指针、结构体)

本篇文章将接着上篇继续介绍C语言的基础知识,那么对于C语言大部分初学者会觉得难以理解, 所以作者将指针单独拿出来写篇较短的文章进行讲解。 1.指针 1.1 内存 要学习指针,就先要了解内存。一起来看。 内存是计算机中的关键组成部分&#xff…

机器学习技术(九)——支持向量机算法实操(基于SVM的模型对潜在运营商客户进行分类)

机器学习技术(九)——支持向量机算法实操 文章目录 机器学习技术(九)——支持向量机算法实操一、引言二、数据集介绍三、导入相关依赖库四、读取数据五、数据可视化分析1、是否为潜在客户与不同用户主叫时长对比2、是否为潜在合约…

绘图(一)弹球小游戏

AWT编程 语雀 仓库:Java图形化界面: Java图形化界面学习demo与资料 (gitee.com) 很多程序如各种小游戏都需要在窗口中绘制各种图形,除此之外,即使在开发JavaEE项目时, 有 时候也必须"动态"地向客户 端生成各种图形、…

C语言进阶指针(3) ——qsort的实现

大家好&#xff0c;我们今天来学习回调函数qsort的实现。 首先让我们打开cplusplus.com找到qsort函数。 我们看到这个函数就可以看到它的头文件和参数信息。 #include<stdlib.h> void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const voi…

前后端跨域请求问题解决方法

如图&#xff1a; 1.在config配置包中创建一个CorsConfig配置类 2.将下面代码复制到这个类中即可 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfigurati…

[字符串和内存函数]strcmp和strncmp以及memcmp的区别

CPlus中对strcmp的介绍 #include <stdio.h> #include <string.h>int main () {char key[] "apple";char buffer[80];do {printf ("Guess my favorite fruit? ");fflush (stdout);scanf ("%79s",buffer);} while (strcmp (key,buf…

MySQL 约束与复杂查询

当涉及到数据库管理系统&#xff08;DBMS&#xff09;的高级主题时&#xff0c;包括数据库的约束、表的设计以及各种类型的查询&#xff0c;特别是聚合查询、联合查询和合并查询&#xff0c;是非常重要的。这些主题可以帮助我们更好地理解数据库的内部工作机制以及如何有效地操…

[maven] 创建 spring boot 项目及使用 Jenkins 运行 maven

[maven] 创建 spring boot 项目及使用 Jenkins 运行 maven 本篇笔记走一下用 maven 创建 spring boot 项目和利用 Jenkins 管理 maven 流程 使用 maven 创建 spring boot 项目 根据官方文档说&#xff0c;现在使用 boot 需要 java 17&#xff0c;Gradle 7.5/Maven 3.5 spri…

idea无法通过vpn 连接到数据库或者kafka

本地navicate 等sql客户端 &#xff0c;通过vpn&#xff0c;可以连接到数据库&#xff0c;&#xff0c;xshell也可以通过vpn连接到远程机器&#xff0c;但是&#xff0c;idea开发时&#xff0c;报连接超时错误&#xff0c;解决方法&#xff1a; 项目中 VM这一栏加上-Djava.net…

区块链:去中心化革命下的创新与发展!

区块链作为一项重要的技术实验&#xff0c;确实具有重大的影响力。它代表了一场去中心化的运动&#xff0c;吸引了许多研究人员、工程师、建设者和用户的参与&#xff0c;创造了我们目前所见到的一些最有趣的技术。 区块链的透明特性赋予了用户对于数据和交易的控制权&#xff…

来看看Python __all__变量的用法

​ 事实上&#xff0c;当我们向文件导入某个模块时&#xff0c;导入的是该模块中那些名称不以下划线&#xff08;单下划线“_”或者双下划线“__”&#xff09;开头的变量、函数和类。因此&#xff0c;如果我们不想模块文件中的某个成员被引入到其它文件中使用&#xff0c;可以…

展示日志log4.properties

log4.properties 1.log4.properties 此时文件主要用于展示日志的输出的级别的信息。 # Set root category priority to INFO and its only appender to CONSOLE. #log4j.rootCategoryINFO, CONSOLE debug info warn error fatal log4j.rootCategoryinfo, CONSO…