数据可视化
一、基本概念
1.什么是数据可视化?
数据可视化是关于数据视觉表现形式的科学技术研究。可以简单的理解为:将数据转换成易于人员辨别识别的数据表现形式。常见的有:2D图表、3D图表、地图、矢量图等。
2.数据可视化发展史
数据可视化起源于20世纪60年代诞生的计算机图形学。计算机图形学广泛应用于各个领域,深刻影响改变我们的生活。常见的有:操作系统、工程制图CAD、计算机动画、计算机游戏、VR技术、数据可视化等。
在获得计算机图形学发展后,先后经历了科学可视化、信息可视化和数据可视化三个阶段,最初由科研人员提出科学建模和数据的可视化需求,在进入 20 世纪 90 年代后,出现大量单机数据可视化需求,EXCEL 是这个时期的代表,互联网时代各种产品兴起,大数据爆发式增长,促使数据可视化技术飞速发展。
3.数据可视化应用常见
-
简单应用
- Excel
- XMind
-
复杂应用
- 数据大屏
- 数据报表
- 地图
4.数据可视化发展场景
-
逐步成为前端工程师的标准技能
-
具备可大大增长自身的竞争力
-
未来具有广阔的发展前景
二、部分数据可视化解决方案
1.Highcharts
Highcharts是一个用纯 JavaScript 编写的一个图表库, 能够很简单便捷的在 Web 网站或是 Web 应用程序添加有交互性的图表,Highcharts 支持的图表类型有直线图、曲线图、区域图、柱状图、饼状图、散状点图、仪表图、气泡图、瀑布流图等多达 20 种图表,其中很多图表可以集成在同一个图形中形成混合图。
Highcharts 从 4.2.0 开始,已经不依赖 jQuery(参考例子),如果你的页面中不需要 jQuery,那么无需引入;不依赖 jQuery 的原因是我们将去掉了适配器并支持 CommonJS 模块标准,也就是说 Highcharts 可以在所有 CommonJS 规范下的环境中运行(例如 Nodejs),这也使得我们的产品可以结合目前市面上常用的库使用,例如 React、Browserify 、Webpack、Vue、AngularJS 等。
1.在react中的使用
Highcharts 包含标题(Title)、坐标轴(Axis)、数据列(Series)、数据提示框(Tooltip)、图例(Legend)、版权标签(Credits)等,另外还可以包括导出功能按钮(Exporting)、标示线(PlotLines)、标示区域(PlotBands)、数据标签(dataLabels)等。
如图:
图表类型:
图表类型
- line:直线图,【查看教程】
- spline:曲线图,【查看教程】
- area:面积图,【查看教程】
- areaspline:曲线面积图,【查看教程】
- arearange:面积范围图,【查看教程】
- areasplinerange:曲线面积范围图,【查看教程】
- column:柱状图,【查看教程】
- columnrange:柱状范围图,【查看教程】
- bar:条形图,【查看教程】
- pie:饼图,【查看教程】
- scatter:散点图,【查看教程】
- boxplot:箱线图,【查看教程】
- bubble:气泡图,【查看教程】
- errorbar:误差线图,【查看教程】
- funnel:漏斗图,【查看教程】
- gauge:仪表图
- waterfall:瀑布图,【查看教程】
- polar:雷达图,【查看教程】
- pyramid:金字塔,【查看教程】
基本用法
安装
npm install highcharts --save
jd-admin/src/views/home/Index.jsx
import React, { Component } from 'react'
import Highcharts from 'highcharts'
export default class Home extends Component {
componentDidMount(){
let Data = {
chart:{
type:'line'// 折线/曲线图:line; 面积图:area;柱状/条形图:bar;饼状图:pie...
},
title: { //表头
text: '比比谁吃的多'
},
subtitle: { //副标题
text: '数据来源:thesolarfoundation.com'
},
xAxis:{
categories:['苹果','香蕉','橙子'],
title:{
text:'水果'
}
} ,
yAxis: { //y坐标
title: {
text: '吃了多少'
}
},
series: [{ //数据列
// 数据列的名字
name: '小猴',
// 数据
data: [1,4,1]
}, {
name: '小蔡',
data: [3, 2, 5]
}, {
name: '小雷',
data: [3, 2, 1]
}],
tooltip:{//数据提示框
enabled : true //默认值为true
},
credits: { //去掉版权logo
enabled: false
}
}
Highcharts.chart(this.refs.alarmHighChart, Data);//实例化绑定容器的方式
}
render() {
return (
<>
<div ref="alarmHighChart" />
</>
)
}
}
法二:
import React, { Component } from 'react'
// import { Statistic, Row, Col, Button } from 'antd';
import Highcharts from 'highcharts'
// import HighchartsReact from 'highcharts-react-official'
export default class Home extends Component {
componentDidMount(){
this.renderGraph();
}
renderGraph = () => {
let Data = {
chart:{
type:'bar'// 折线/曲线图:spline; 面积图:area;柱状/条形图:bar;饼状图:pie...
},
title: { //表头
text: '2010 ~ 2016 年太阳能行业就业人员发展情况'
},
subtitle: { //副标题
text: '数据来源:thesolarfoundation.com'
},
yAxis: { //y坐标
title: {
text: '就业人数'
}
},
// 图列
legend: {
layout: 'vertical',//方向
align: 'left',//在图表中的对齐方式
verticalAlign: 'middle'
},
series: [{ //数据列
// 数据列的名字
name: '安装,实施人员',
// 数据
data: [43934, 52503, 57177, 69658, 97031, 119931, 137133, 154175]
}, {
name: '工人',
data: [24916, 24064, 29742, 29851, 32490, 30282, 38121, 40434]
}, {
name: '销售',
data: [11744, 17722, 16005, 19771, 20185, 24377, 32147, 39387]
}, {
name: '项目开发',
data: [null, null, 7988, 12169, 15112, 22452, 34400, 34227]
}, {
name: '其他',
data: [12908, 5948, 8105, 11248, 8989, 11816, 18274, 18111]
}],
responsive: {//响应式的样式
rules: [{
condition: {
maxWidth: 800
},
chartOptions: {//图内的样式
legend: {
layout: 'vertical',
align: 'center',
verticalAlign: 'bottom'
}
}
}]
},
tooltip:{//数据提示框
enabled : true
},
credits: { //去掉版权logo
enabled: false
}
}
Highcharts.chart(this.refs.alarmHighChart, Data);//实例化绑定容器的方式
}
render() {
return (
<>
<div ref="alarmHighChart" />
</>
)
}
}
2.Highstock和Highmaps
除了Highcharts这款基本图表产品,另外还有Highstock股票及大数据量时间轴图标和Highmaps地图这两个产品。
(1)他们三者之间的关系:
Highstock 是完全包含 Highcharts 的,是在 Highcharts 的基础上增加了更多高级功能;Highmaps 则完全独立,不过我们提供了地图功能模块 map.js (在 Highmaps 资源包的 modules 目录)供 Highcharts 或 Highstock 调用。
(2)混合使用
A. Highcharts + Highstock 时只需要引入 highstock.js
<script src="http://cdn.highcharts.com.cn/highstock/highstock.js"></script>
B. Highcharts + Highmaps 混合使用是需要 引入 highcharts.js + map.js
<script src="http://cdn.highcharts.com.cn/highcharts/highcharts.js"></script>
<script src="http://cdn.highcharts.com.cn/highmaps/modules/map.js"></script>
C. Highstock + Highmaps 或 Highcharts + Highstock + Highmaps 混合使用时需引入 highstock.js + map.js
<script src="http://cdn.highcharts.com.cn/highstock/highstock.js"></script>
<script src="http://cdn.highcharts.com.cn/highmaps/modules/map.js"></script>
2.AntV
AntV 是蚂蚁金服全新一代数据可视化解决方案,致力于提供一套简单方便、专业可靠、无限可能的数据可视化最佳实践。
AntV 包括以下模块:
- G2:可视化引擎
- G2Plot:图表库
- G6:图可视化引擎
- Graphin:基于 G6 的图分析组件
- F2:移动可视化方案
- ChartCube:AntV 图表在线制作
- L7:地理空间数据可视化
基本用法:
安装
npm install @antv/g2 --save
基于 AntV 技术栈还有许多优秀的项目,在 React 环境下使用 G2,我们推荐使用 Ant Design Charts,BizCharts 和 Viser。
import React, { Component } from 'react';
import { Column,line } from '@ant-design/charts';
class Page extends Component {
render() {
const data = [
{ year: '1991', value: 3 },
{ year: '1992', value: 4 },
{ year: '1993', value: 3.5 },
{ year: '1994', value: 5 },
{ year: '1995', value: 4.9 },
{ year: '1996', value: 6 },
{ year: '1997', value: 7 },
{ year: '1998', value: 9 },
{ year: '1999', value: 13 },
];
const config = {
data,
height: 400,
xField: 'year',
yField: 'value',
point: {
size: 5,
shape: 'diamond',
},
// 配置柱形图的样式
columnStyle: {
fill: 'green',
fillOpacity: 0.5,
// stroke: 'black',
lineWidth: 1,
lineDash: [4,5],
strokeOpacity: 0.7,
shadowColor: 'black',
shadowBlur: 10,
shadowOffsetX: 5,
shadowOffsetY: 5,
cursor: 'pointer'
},
// 配置 线形图的样式
// lineStyle: {
// stroke: 'black',
// lineWidth: 2,
// lineDash: [4,5],
// strokeOpacity: 0.7,
// shadowColor: 'black',
// shadowBlur: 10,
// shadowOffsetX: 5,
// shadowOffsetY: 5,
// cursor: 'pointer'
// }
};
return <Column {...config} />;
}
}
export default Page;
3.zrender
zrender 是二维绘图引擎,它提供 Canvas、SVG、VML 等多种渲染方式。ZRender 也是 ECharts 的渲染器。
- 引入zrender库
- 编写div容器
- 初始化zrender对象
- 初始化zrender绘图对象
- 调用zrender add方法绘图
4.canvas
canvas是HTML5的新特性,可以通过JavaScript在canvas元素上绘制图案。
- 编写canvas标签并指定宽高
- 获取canvas DOM对象
- 获取Canvas对象
- 设置绘图属性
- 调用API
5.svg
SVG 是一种基于XML的图像文件格式,可以用于绘制矢量图形。
- 编写svg标签并指定宽高
- 编写sbg绘图标签
- 编写绘图属性和样式
6.WebGL
WebGL(Web Graphics Library)是一种 3D 绘图协议,WebGL可以为 HTML5 Canvas 提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示 3D 场景和模型了,还能创建复杂的导航和数据视觉化。
7.Skia
Skia是Chrome和Android的底层2D绘图引擎,采用C++编写,位于浏览器的底层。
其中Chrome使用Skia作为绘图引擎,向上层开发了canvas、svg、WebGL、HTML绘图能力。
8.OpenGL
OpenGL是2D、3D图形渲染库,常用于CAD、VR、数据可视化等领域。
9.D3
D3(Data-Driven Documents) 是一个 Javascript 图形库,基于 Canvas、Svg 和 HTML。
10.Three.js
Three.js 是一个基于 WebGL 的 Javascript 3D 图形库。
三、为什么数据可视化推荐Echarts?
1.ECharts VS Highcharts
Highcharts 和 ECharts 的争论非常多;整体上的感受是:
- 学习容易程度:只要懂JS,那么相信你能很快上手。两者打分相同。但是百度出品的Echarts对于国内城市已经有了相应的配置,调用非常方便。因此在绘制地图方面,Echarts略胜一筹。
- 大数据表现力:有网友说,当数据量达到万条的级别时,Highcharts的多表联动、自动缩放具有更强的优势,而Echarts则会出现明显的卡顿,需要设置datazoom。因此Hightcharts完胜。
- 文档友好程度:Echarts是百度的,Highcharts是国外的。另外,Echarts的文档像是说明书,而Highcharts的文档像是博客。根据个人喜好判断。
- 图表美观程度:看看两家的实例Echarts、Highcharts,Echarts完爆啊(上面的对比雷达图就是用Echarts做的)!而且Echarts基于Canvas,对于3D绘图有绝对优势,能画出极漂亮的图形。
- 图表的丰富程度:两方面,一是图表种类,二是3D表现力。Echarts丰富的图表种类,和惊艳的3D效果,吊打Highcharts。
- Highcharts 收费,这是很多开发者转向 ECharts 的主要原因
- ECharts 国内知名度更高,国内企业认可度更高
2.ECharts VS AntV
- AntV 文档阅读体验更符合互联网产品使用习惯
- AntV 产品体系拆分更加清晰,但一定程度上提升了学习成本
- ECharts 社区更强大
- ECharts 使用更加广泛
ECharts 优势总结
- 简单易用
- 文档全面
- 社区强大
- 高知名度