数据可视化详解

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准备一个具备大小(宽高)的Dom --><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

下载微信开发者工具申请小程序appid

下载githup上的开源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

下载微信开发者工具申请小程序appid

下载githup上的开源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 模块:可支持开发个性化的数据多维分析图形。

👬 双引擎渲染: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>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335