前言

echarts是比较流行的图标和地图框架,文档清晰,灵活,满足各种自定义。众多的api接口,让使用者犹如大海捞针,每一个细节都需要通过api慢慢调整,耗费开发者大量的时间精力。

在这里补充一种新的图表地图框架,虽然做得不如echarts强大,适合快速开发节奏,让前端程序员在除了echarts以外还可以多一种选择。

antv

antv是蚂蚁金服团队打造的图表和地图框架(用过antd的同学应该知道这个团队)。

官方网站:https://antv.vision/zh/about

antv包含
G2(就是图表渲染,条形图,饼图,折线图等,里面有一些比较好看的图表设计,可以直接拿来用。)
G2地址 https://g2.antv.vision/zh/examples/gallery
G6 (思维导图,流程展示,树状图,)
G6地址 https://g6.antv.vision/zh/examples/tree/compactBox
F2 (针对移动端图表进行适配)
F2地址 https://f2.antv.vision/zh/examples/candlestick/basic
L7(地图,支持全球,全国(目前只支持中国),省,市,)
L7地址 https://l7.antv.vision/zh/examples/gallery
正如最开始所说,antv不如echarts全面,但参照了部分echarts的api借口,在使用过程能看到和echarts类似的api和相似的功能。

antv快速生成图表

antv的优势在于快速生成代码,配置图表的功能chartCub魔方(图表魔方,图表生成器)。

echarts自定义图表,是先写配置api才能看到生成图表的样式,而图表魔方为用户提供预览图表的功能,通过可视化界面,对图表进行样式配置并生成相应的代码。

图表魔方地址 https://chartcube.alipay.com/guide
这是未来前端发展的一种趋势,可视化配置,会慢慢代替许多代码的复制粘贴。虽然目前图表魔方只支持比较基础的图标配置,比较个性化的图表还是需要使用echarts。

笔者只用过G2和L7,其它内容暂不做展示,如果以后也有使用,会更新本篇博客。

G2使用

安装 @antv/g2plot
yarn add @antv/g2plot
npm i @antv/g2plot --save

以下代码都是通过配置后图表魔方自动生成的代码
//导入G2Plot
import * as G2Plot from '@antv/g2plot';
//选择图表生成的dom节点,图表会生成到这个dom节点内。
//唯一需要注意的是,如果是vue或者react框架,进行这一步操作的时候,一定要确定这dom节点已经渲染成功,并且能够被找到。
const container = document.getElementById('app');
//需要渲染的数据,字段名和数据结构不可更改
const data = [{"series": "门店一","x": "家具家电","y": 185},{"series": "门店一","x": "粮油副食","y": 509},{"series": "门店一","x": "美容洗护","y": 901},{"series": "门店一","x": "母婴用品","y": 645},{"series": "门店一","x": "进口食品","y": 98},{"series": "门店一","x": "食品饮料","y": 724},{"series": "门店一","x": "家庭清洁","y": 471},{"series": "门店二","x": "家具家电","y": 276},{"series": "门店二","x": "粮油副食","y": 186},{"series": "门店二","x": "美容洗护","y": 648},{"series": "门店二","x": "母婴用品","y": 484},{"series": "门店二","x": "进口食品","y": 21},{"series": "门店二","x": "食品饮料","y": 721},{"series": "门店二","x": "家庭清洁","y": 917}
];/** 图表配置,代码由图表魔方自动生成,直接复制粘贴就好了 */
const config = {/** 标题 */ title: {visible: true,text: '考试科目柱状图',},/** 副标题 */ description: {visible: true,text: '考试科目学生参加百分比',},legend: {flipPage: false,},xAxis: {title: {visible: false,},},yAxis: {title: {visible: false,},},/** 自使用父级的宽高 */ forceFit: true,/** 也可以自定义图表的宽高 */ // width: 570,// height: 360,xField: 'x',yField: 'y',stackField: 'series',/** 两种渲染颜色 */ color: ['#e9e9e9', '#5b8ff9'],
};/** 渲染实例 */const plot = new G2Plot.PercentStackedColumn(container, {data: chartsData,...config,});plot.render();

如果是使用其它框架,就需要考验最基础的代码改造能力,echarts图表魔方,能够提供的是原生的js代码。

改造的完整react框架组件

import React, { useEffect, useState } from 'react';import * as G2Plot from '@antv/g2plot';/** 图标配置,代码由图表魔方自动生成 */
const config = {/** 标题 */ title: {visible: true,text: '考试科目柱状图',},/** 副标题 */ description: {visible: true,text: '考试科目学生参加百分比',},legend: {flipPage: false,},xAxis: {title: {visible: false,},},yAxis: {title: {visible: false,},},/** 自使用父级的宽高 */ forceFit: true,/** 也可以自定义图表的宽高 */ // width: 570,// height: 360,xField: 'x',yField: 'y',stackField: 'series',/** 两种渲染颜色 */ color: ['#e9e9e9', '#5b8ff9'],
};const PaperRadar: React.FC = () => {type ChartsDataType = {series: string;x: string;y: number;}[];/** 数据渲染 */const [chartsData, setChartsData] = useState<ChartsDataType>([] as ChartsDataType);/** 渲染函数 */const chartsRender = () => {const container: HTMLElement = document.getElementById('exam-bar') as HTMLElement;const plot = new G2Plot.PercentStackedColumn(container, {data: chartsData,...config,});plot.render();};useEffect(() => {setChartsData([{series: '门店一',x: '家具家电',y: 777,},{series: '门店一',x: '粮油副食',y: 934,},{series: '门店一',x: '美容洗护',y: 454,},{series: '门店一',x: '母婴用品',y: 999,},{series: '门店一',x: '进口食品',y: 98,},{series: '门店一',x: '食品饮料',y: 317,},{series: '门店一',x: '家庭清洁',y: 307,},{series: '门店二',x: '家具家电',y: 142,},{series: '门店二',x: '粮油副食',y: 199,},{series: '门店二',x: '美容洗护',y: 582,},{series: '门店二',x: '母婴用品',y: 64,},{series: '门店二',x: '进口食品',y: 89,},{series: '门店二',x: '食品饮料',y: 641,},{series: '门店二',x: '家庭清洁',y: 984,},]);// chartsRender();}, []);useEffect(() => {if (chartsData.length) {chartsRender();}}, [chartsData]);return (<><div id="exam-bar" style={{width:"100%"}}></div></>);
};export default PaperRadar;

L7地图的使用

根据antv的l7的安装教程,分别安装 @antv/l7 @antv/l7-district @antv/l7-maps

yarn add @antv/l7
yarn add @antv/l7-district
yarn add @antv/l7-maps
或
npm i @antv/l7 --save
npm i @antv/l7-district
npm i @antv/l7-maps

react代码

import React, { useEffect, useState } from 'react';import { Scene } from '@antv/l7';
import { CountryLayer } from '@antv/l7-district';
import { Mapbox } from '@antv/l7-maps';/** 地图配置 */// 我选择的事全国地图,name和对应的code都是antv l7官方提供的,
// value字段及字段名是可以自定义的const ProvinceData = [{name: '云南省',code: 530000,value: 0,},{name: '黑龙江省',code: 230000,value: 0,},{name: '贵州省',code: 520000,value: 0,},{name: '北京市',code: 110000,value: 0,},{name: '河北省',code: 130000,value: 0,},{name: '山西省',code: 140000,value: 0,},{name: '吉林省',code: 220000,value: 0,},{name: '宁夏回族自治区',code: 640000,value: 0,},{name: '辽宁省',code: 210000,value: 0,},{name: '海南省',code: 460000,value: 0,},{name: '内蒙古自治区',code: 150000,value: 0,},{name: '天津市',code: 120000,value: 0,},{name: '新疆维吾尔自治区',code: 650000,value: 0,},{name: '上海市',code: 310000,value: 0,},{name: '陕西省',code: 610000,value: 0,},{name: '甘肃省',code: 620000,value: 0,},{name: '安徽省',code: 340000,value: 0,},{name: '香港特别行政区',code: 810000,value: 0,},{name: '广东省',code: 440000,value: 0,},{name: '河南省',code: 410000,value: 0,},{name: '湖南省',code: 430000,value: 0,},{name: '江西省',code: 360000,value: 0,},{name: '四川省',code: 510000,value: 0,},{name: '广西壮族自治区',code: 450000,value: 0,},{name: '江苏省',code: 320000,value: 0,},{name: '澳门特别行政区',code: 820000,value: 0,},{name: '浙江省',code: 330000,value: 0,},{name: '山东省',code: 370000,value: 0,},{name: '青海省',code: 630000,value: 0,},{name: '重庆市',code: 500000,value: 0,},{name: '福建省',code: 350000,value: 0,},{name: '湖北省',code: 420000,value: 0,},{name: '西藏自治区',code: 540000,value: 0,},{name: '台湾省',code: 710000,value: 100,},
];const StudentPostion: React.FC = () => {const draw = () => {/** scene这个实例一定要在dom渲染完成之后创建 */const scene = new Scene({/** 传入需要渲染的dom节点的id */id: 'student-map',/** 渲染的地图会有一个antv的logo,可以让其消失 */logoVisible: false,map: new Mapbox({center: [116.2825, 39.9],pitch: 0,/** 其实这是一张世界地图,通过blank将除中国外的地方变为空白 */style: 'blank',zoom: 3,minZoom: 0,maxZoom: 10,}),});scene.on('loaded', () => {new CountryLayer(scene, {/** 创建的数据,绑定到data字段进行渲染 */data: ProvinceData,joinBy: ['adcode', 'code'],depth: 1,/** 省界线颜色 */provinceStroke: '#fff',/** 省界线颜色宽度 */provinceStrokeWidth: 1,/** 市界线颜色 */cityStroke: '#EBCCB4',cityStrokeWidth: 1,/** 地图文字颜色 */label: {/** 文字背景色 */stroke: 'rgba(0,0,0,0)',/** 文字颜色 */color: 'transparent',},fill: {color: {/** field 字段传入数据里面的具体值的字段名称 */field: 'value',/** 根据值的大小会渲染以下的颜色,值越大,会渲染数组靠后的颜色 */values: ['#BAE7FF', '#69C0FF', '#1890FF', '#0A73DA', '#004599'],},},/** 鼠标放上去的提示框内容渲染,相当于echarts的tooltip */popup: {enable: true,Html: (props: any) => {return `<span>${props.NAME_CHN}学生</span>:<span>${props.value}人</span>`;},},});});};useEffect(() => {draw();}, []);return (<><div id="student-map" style={{ height: '400px', padding: '20px 0 0 30px', fontWeight: 600 }}><div style={{ fontSize: '18px' }}>学生地理位置分布统计图</div></div></>);
};

效果图

antv的使用大家还是自己去体验吧。这里能展示的内容只是九牛一毛

antv,图表和地图相关推荐

  1. Vue 之 echarts 图表数据可视化的基础使用(简单绘制各种图表、地图)

    Vue 之 echarts 图表数据可视化的基础使用(简单绘制各种图表.地图) 目录 Vue 之 echarts 图表数据可视化的基础使用(简单绘制各种图表.地图) 一.简单介绍 二.环境搭建 三.使 ...

  2. 使用AntV L7实现地图/世界地图GeoJson资源分享

    尝试了 https://blog.csdn.net/qq_29918313/article/details/118361046 作者:Delicia_Lani Hicharts实现世界地图思路及踩过的 ...

  3. @antv/l7绘制地图,添加图例,修改地图上颜色,是否允许地图拖拽,是否滚动缩放等

    html <div class="charts-box"><div style="min-height: 300px; justify-content: ...

  4. openlayers学习——14、openlayers结合echarts图表和地图

    openlayers结合echarts图表和地图 一.普通饼图.柱图 二.加载炫酷地图标记 前言:基于Vue,学习openlayers,根据官网demo,记录常用功能写法.本人不是专业GIS开发,只是 ...

  5. AGS API for JavaScript 图表上地图

    图1 图2 图3 -------------------------------------华丽丽的分割线----------------------------------- 图4 图5 --图片欣 ...

  6. antv图表 根据屏幕大小响应式_做可交互的统计图表,这套图形语法不容错过

    选好可视化 "一图胜千言",是最直观的数据可视化魅力.以图表来传达和沟通信息,其效率远超枯燥乏味的数据表达. 有需求就有市场.数据可视化崭露头角后,各个厂商出备的产品.解决方案,开 ...

  7. 【数据可视化】Antv L7给地图添加图例Legend

    地图组件用于控制地图的状态如果平移,缩放,或者展示地图一些的辅助信息如图例.比例尺 L7 目前支持 Control Zoom 放大缩小 Scale 比例尺 Layers 图层列表 组件介绍: impo ...

  8. 【Antv/Vue3】vue项目中使用antv/L7制作地图

    官网地址:快速上手 | L7 CDN方式引入: <head> <! --引入最新版的L7--> <script src = 'https://unpkg.com/@ant ...

  9. antv/l7+高德地图+天气弹窗

    L7 专注数据可视化层数据表达,目前 L7 还不支持独立的地图引擎,需要引入第三方引擎,目前支持高德地图和 MapBox 两种. 1.引入map import { GaodeMap } from '@ ...

  10. axure专业级图表/地图可视化元件库 – Axhub Charts Pro V2.1.1

    Axhub Charts Pro 支持 Antv G2 20+ 种图表 支持 80 多项个性化配置 支持 ECharts 1000+ 图表 支持 Highcharts 100+ 图表 早在 2018 ...

最新文章

  1. GitHub中的奇葩项目:登顶过趋势榜的女装大佬项目
  2. vc 6.0 显示文件全路径_Linux常用命令大全(非常全!!!)
  3. React基础学习(第二天)
  4. 用3年时间破解学界200多年难题,年仅21岁的天才竟因谈了一场恋爱挂掉了.........
  5. linux环境特性的文件夹,在Linux环境下如何消减可执行文件或者动态库的大小
  6. python和json转换_【Python】python和json数据相互转换,json读取和写入,repr和eval()使用...
  7. [转载] Java为什么不允许覆盖静态方法?
  8. easyswoole数据库连接池_Swoole Redis 连接池的实现
  9. JAVE实现音频截取并上传OSS
  10. scrt 上传和下载文件
  11. 你真的搞懂Class,class了么?
  12. 【理论】基于模型控制和基于数据驱动控制
  13. 好记性不如“烂笔头”
  14. 解决No version of NDK matched the requested version编译报错的问题
  15. 0基础入行,新手该如何学习SEM
  16. 如何在对方不知情的情况下定位微信好友
  17. 关于 RestTemplate 中文乱码和List接收
  18. python,你也和小猪佩奇一样社会了!
  19. 7-11 到底是不是太胖了(10 分)
  20. eclipse第十七课时

热门文章

  1. RocketMq 启动报错错误: 找不到或无法加载主类 Files\Java\jdk1.8.0_301\jre\lib\ext
  2. VMware14安装windows7的详细过程
  3. 苹果app退款_??充值消费退款
  4. 亿级流量 即时通讯IM系统 设计详解(全)
  5. 如何使用Flutter封装即时通讯IM框架开发插件
  6. 即时通讯IM,是时代进步的逆流?看看JNPF怎么说
  7. Visual Studio完成并换行快捷键
  8. 中学-知识与能力【8】
  9. 利率里面的BP是什么意思,bp是什么意思贷款利率
  10. CobaltStrike服务端自身隐匿技巧