1.数据可视化相关的库
D3 是一个JavaScript数据可视化库用于HTML和SVG。它旨在将数据带入生活,强调Web标准,将强大的可视化技术与数据驱动的文档对象模型(DOM)操作方法相结合。 D3是Github上最流行的数据可视化项目,在数据科学界有很好的表现。点击去往官方网址。
ECharts提供了常规的折线图、柱状图等;用于地理数据可视化的图;用于关系数据可视化的图表;还有用于 BI 的漏斗图,仪表盘,并且支持图与图之间的混搭。除了已经内置的包含了丰富功能的图表,ECharts 还提供了自定义系列,只需要传入一个renderItem函数,就可以从数据映射到任何你想要的图形。点击去往官方网址。
chartjs是一个图表控件集合,使用html5的canvas进行绘制。点击去往官方网址。
Highcharts 系列软件包含 Highcharts JS,Highstock JS,Highmaps JS 共三款软件,均为纯 JavaScript 编写的 HTML5 图表库,全部源码开放,个人及非商业用途可以任意使用及源代码编辑。点击去往官方网址。
AntV 3.0 已全新升级,主要包含 G2、G6、F2、L7 以及一套完整的图表使用和设计规范。得益于丰富的业务场景和用户需求挑战,AntV 经历多年积累与不断打磨,已支撑阿里集团内外 20000+ 业务系统,通过了日均千万级 UV 产品的严苛考验后方敢与君见。点击去往官方网址。
2.使用ECharts实现一周的盈亏可视化图表
1.在Web端实现ECharts
下载ECharts相关的资源文件,官方为我们提供了多种下载方式,选择自己可以操作的下载方式即可,本文主要使用dist文件夹下的echarts.min.js;
在Visual Studio Code中新建一个echarts01.html,用来展示可视化图表,并在文中实现如下代码;
<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>Document</title><!-- 引入 ECharts 文件 --><scriptsrc="./dist/echarts.min.js"></script><style>h1{text-align:center;? ? ? ? }</style></head><body><h1>Week's Gain And Loss</h4><divid="main"style="width: 100%;height:800px;"></div><scripttype="text/javascript">// 基于准备好的dom,初始化echarts实例varmyChart=echarts.init(document.getElementById('main'));// 指定图表的配置项和数据option={tooltip: {trigger:'axis',axisPointer: {// 坐标轴指示器,坐标轴触发有效type:'shadow'// 默认为直线,可选为:'line' | 'shadow'? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? },legend: {data: ['利润','支出','收入']? ? ? ? ? ? ? ? },grid: {left:'3%',right:'4%',bottom:'3%',containLabel:true? ? ? ? ? ? ? ? },xAxis: [? ? ? ? ? ? ? ? ? ? {type:'value'? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ],yAxis: [? ? ? ? ? ? ? ? ? ? {type:'category',axisTick: {show:false? ? ? ? ? ? ? ? ? ? ? ? },data: ['周一','周二','周三','周四','周五','周六','周日']? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ],series: [? ? ? ? ? ? ? ? ? ? {name:'利润',type:'bar',label: {show:true,position:'inside'? ? ? ? ? ? ? ? ? ? ? ? },data: [200,170,240,244,200,220,210]? ? ? ? ? ? ? ? ? ? },? ? ? ? ? ? ? ? ? ? {name:'收入',type:'bar',stack:'总量',label: {show:true? ? ? ? ? ? ? ? ? ? ? ? },data: [320,302,341,374,390,450,420]? ? ? ? ? ? ? ? ? ? },? ? ? ? ? ? ? ? ? ? {name:'支出',type:'bar',stack:'总量',label: {show:true,position:'left'? ? ? ? ? ? ? ? ? ? ? ? },data: [-120,-132,-101,-134,-190,-230,-210]? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ]? ? ? ? ? ? };// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);</script></body></html>
在代码中的option是数据可视化的关键数据,在使用过程中可根据具体需求更换option来展示其它饼状图、雷达图、柱状图等。
2.结合腾讯云实现以上案例
登录腾讯云官方注册账号,登录成功之后,在左上角找到云产品>云开发>云开发CloudBase>新建环境即可使用;
如图所示,在左侧找到数据库>添加集合Echarts>在桌面新建txt文件,并把option数据放入文件中,保存为json文件>导入json文件到Echarts集合中
说明:其中点击红色箭头导入json文件,蓝色箭头部分为导入成功的一条数据。
在代码中使用云开发来实现ECharts,代码如下所示;
<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>Document</title><scriptsrc="https://imgcache.qq.com/qcloud/tcbjs/1.5.1/tcb.js"></script><!-- 引入 ECharts 文件 --><scriptsrc="./dist/echarts.min.js"></script><style>h1{text-align:center;? ? ? ? }</style></head><body><!-- 为ECharts准备一个具备大?。砀撸┑腄om --><h1>Week's Gain And Loss</h4><divid="main"style="width: 100%;height:800px;"></div><scripttype="text/javascript">constapp=tcb.init({env:'你的环境ID'// 此处填入你的环境ID? ? ? ? });app.auth({persistence:'session'//在窗口关闭时清除身份验证状态? ? ? ? }).anonymousAuthProvider().signIn()//AnonymousAuthProvider.signIn() 匿名登录云开发.then(()=>{//登录成功constdb=app.database()db.collection("Echarts").where({_id:"ofPyPg1pMtWhlbVdheFDRrp5b8o1YSzPZeg5znMXFCg2GsxL",}).get().then(res=>{constoption=res.data[0]// 基于准备好的dom,初始化echarts实例varmyChart=echarts.init(document.getElementById('main'));// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);? ? ? ? ? ? ? ? })}).catch(err=>{console.log("登录失败",err)//登录失败? ? ? ? ? ? })</script></body></html>
4.在腾讯云开发左侧找到静态网站托管,这里是把自己的HTML文件和ECharts文件上传到文件管理中,以便我们在浏览器访问
打开静态网站托管>文件管理>上传文件(找到自己HTML文件的存放位置上传即可)
打开静态网站托管>基础配置(找到自己的默认域名)>在浏览器中通过“域名/文件路径”即可访问
3.在微信小程序中使用ECharts
在微信开发者创建一个新项目,创建成功之后把其它不需要的文件删除干净
把githup上下载的小程序中的ec-canvas、img文件复制到自己创建的项目中
把app.wxss中的代码复制到自己项目中的app.wxss
.container{position:absolute;top:0;bottom:0;left:0;right:0;display:flex;flex-direction:column;align-items:center;justify-content:space-between;box-sizing:border-box;}
把其中一个page页面复制到自己项目中,其中wxml、wxss、json文件都是通用的,使用时把js文件中的option替换掉就可以使用其它页面
4.小程序云开发实现ECharts
在微信开发者创建一个新项目,并点击云开发,创建成功之后把其它不需要的文件删除干净,并在app.js中初始化云开发,云开发环境id在小程序云开发控制台中设置找到
onLaunch:function() {wx.cloud.init({env:"云开发环境id",? })}
在云开发控制台>数据库>新建集合Echarts>高级操作>add模板,其中data为option的数据,点击执行即可
把githup上下载的小程序中的ec-canvas、img文件复制到自己创建的项目中
把app.wxss中的代码复制到自己项目中的app.wxss,代码同上
把其中一个page页面复制到自己项目中,其中wxml、wxss、json文件都是通用的,使用时把js文件中的option替换掉就可以使用其它页面,这里的option通过云开发获得
import*asechartsfrom'../../ec-canvas/echarts';constapp=getApp()constdb=wx.cloud.database()asyncfunctioninitChart(canvas,width,height,dpr) {constoption=(awaitdb.collection("Echarts").where({_id:"baada3ac5ed4ab250022ec955b2a7fec",}).get()).data[0]constchart=echarts.init(canvas,null, {width:width,height:height,devicePixelRatio:dpr? })canvas.setChart(chart);chart.setOption(option,true);returnchart;}Page({onShareAppMessage:function(res) {return{title:'ECharts 可以在微信小程序中使用啦!',path:'/pages/index/index',success:function() { },fail:function() { }? ? }? },data: {ec: {onInit:initChart? ? }? },})
3.使用AntV实现各国人口分布图
1.AntV的特性
?? 完善的图形语法:数据到图形的映射,能够绘制出所有的图表。
?? 全新的交互语法:通过触发和反馈机制可以组合出各种交互行为,对数据进行探索。
?? 强大的 View ??椋嚎芍С挚⒏鲂曰氖荻辔治鐾夹巍?/p>
?? 双引擎渲染:Canvas 或 SVG 任意切换。
?? 可视化组件体系:面向交互、体验优雅。
?? 全面拥抱 TypeScript:提供完整的类型定义文件。
2.Antv的安装方法
通过 npm 安装
npm install @antv/g2 --save
成功安装完成之后,即可使用import或require进行引用。
import { Chart } from '@antv/g2';const chart = new Chart({? container: 'c1',? width: 600,? height: 300,});
浏览器引入
既可以通过将脚本下载到本地也可以直接引入在线资源:
<!-- 引入在线资源,选择你需要的 g2 版本以替换 version 变量 --><script src="https://gw.alipayobjects.com/os/lib/antv/g2/{{version}}/dist/g2.min.js"></script>
<!-- 引入本地脚本 --><script src="./g2.js"></script>
你也可以直接通过unpkg下载。
3.AntV的使用
可以在官网上找到需要自己使用的Demo,把对应的代码替换掉即可使用,以下为各国人口分布图的代码:
<!DOCTYPE html><html><head><metacharset="utf-8"/><title>柱状图</title><scriptsrc="./node_modules/@antv/g2/dist/g2.min.js"></script><style>h1{text-align:center;? ? }</style></head><body><h1>各国人口分布图</h1><!-- 创建图表容器 --><divid="container"></div><script>constdata=[{city:'中国(北京)',type:'首都人口',value:0.01},{city:'中国(北京)',type:'城市人口',value:0.53},{city:'中国(北京)',type:'农村人口',value:0.46},{city:'美国(华盛顿)',type:'首都人口',value:0.01},{city:'美国(华盛顿)',type:'城市人口',value:0.8},{city:'美国(华盛顿)',type:'农村人口',value:0.19},{city:'印度(德里)',type:'首都人口',value:0.02},{city:'印度(德里)',type:'城市人口',value:0.3},{city:'印度(德里)',type:'农村人口',value:0.68},{city:'俄罗斯(莫斯科)',type:'首都人口',value:0.08},{city:'俄罗斯(莫斯科)',type:'城市人口',value:0.66},{city:'俄罗斯(莫斯科)',type:'农村人口',value:0.26},{city:'法国(巴黎)',type:'首都人口',value:0.16},{city:'法国(巴黎)',type:'城市人口',value:0.63},{city:'法国(巴黎)',type:'农村人口',value:0.21},{city:'韩国(首尔)',type:'首都人口',value:0.19},{city:'韩国(首尔)',type:'城市人口',value:0.63},{city:'韩国(首尔)',type:'农村人口',value:0.18},{city:'丹麦(哥本哈根)',type:'首都人口',value:0.22},{city:'丹麦(哥本哈根)',type:'城市人口',value:0.65},{city:'丹麦(哥本哈根)',type:'农村人口',value:0.13},{city:'冰岛(雷克雅未克)',type:'首都人口',value:0.56},{city:'冰岛(雷克雅未克)',type:'城市人口',value:0.38},{city:'冰岛(雷克雅未克)',type:'农村人口',value:0.06},? ? ];constchart=newG2.Chart({container:'container',autoFit:true,height:700,? ? });chart.data(data);chart.scale('value', {alias:'占比(%)',? ? });chart.axis('city', {tickLine:null,line:null,? ? });chart.axis('value', {label:null,title: {style: {fontSize:14,fontWeight:300,? ? ? ? },? ? ? },grid:null,? ? });chart.legend({position:'top',? ? });chart.coordinate('rect').transpose();chart.tooltip({shared:true,showMarkers:false,? ? });chart.interaction('active-region');chart.interval().adjust('stack').position('city*value').color('type*city', (type,city)=>{if(type==='首都人口') {return'#1890ff';? ? ? ? }if(type==='城市人口') {return'#ced4d9';? ? ? ? }if(type==='农村人口') {return'#f0f2f3';? ? ? ? }if(type==='首都人口'&&city==='中国(北京)') {return'#f5222d';? ? ? ? }? ? ? }).size(26).label('value*type', (val,t)=>{constcolor=t==='首都人口'?'white':'#47494b';if(val<0.05) {returnnull;? ? ? ? }return{position:'middle',offset:0,style: {fontSize:12,fill:color,lineWidth:0,stroke:null,shadowBlur:2,shadowColor:'rgba(0, 0, 0, .45)',? ? ? ? ? },? ? ? ? };? ? ? });chart.render();</script></body></html>