ECharts是一款开源的统计图表框架,ECharts 底层依赖 ZRender,ZRender是一个轻量级的二维绘制库。ECharts的使用也是非常的简单,网上有很多教程,这里再简单的整理一下。
首先,echarts.min.js的引入;
可以去官网或github上下载合适的版本,也可以优雅地使用npm install echarts --save命令下载,这里从github下载最新的版本4.7.0;
第二,在进行统计图的使用之前,还有一点非常重要,那就是主题的设置。
echarts默认有三个主题,第一个是默认的主题,第二个是dark,黑色的背景;第三个是light,白色的背景;统计图表里的颜色,有默认值。
很多同事,包括我自己,一上来就画统计图,还不知道有主题设置这一说,后面在调整统计图里的色调时,费了老大的劲了,而且越调整越不协调,搞得花里胡哨的。通过设置主题可以避免这个繁琐的环节。
先看看效果,有对比,才有差异;主题设置是很重要的一环,选对了主题,后面就不需要手动设置color调整颜色了,调色绝对是个费时费力不讨好的活,毕竟每个人的审美观不同。选对了主题,就不用拘于调色这种小节了,多省事。
就用饼图,做三种主题的的区分吧;
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>myProject</title>
<!-- 引入 lib/echarts.custom.min.js -->
<script src="lib/echarts.min.js"></script>
</head>
<body>
<div id="main" style="width: 600px;height:400px;"></div>
<script>
// 绘制图表。
var pieMain = echarts.init(document.getElementById('main'),'light');//使用默认样式、dark、light;
pieMain.setOption({
series: {
type: 'pie',
data: [
{name: 'A', value: 1212},
{name: 'B', value: 2323},
{name: 'C', value: 1919}
]
}
});
</script>
</body>
</html>
这三种主题,如果都不满意,那么可以通过 ECharts主题定制 自定义主题,这些主题,有主色调,媚而不妖,太耐看了。
//设置主题
$.getJSON('lib/wonderland.json', function (themeJSON) {
echarts.registerTheme('wonderland',themeJSON)
var chart = echarts.init(document.getElementById('main'), 'wonderland');
chart.setOption({
series: {
type: 'pie',
data: [
{name: 'A', value: 1212},
{name: 'B', value: 2323},
{name: 'C', value: 1919},
{name: 'D', value: 1719},
{name: 'E', value: 1519}
]
}
});
});
echarts的js文件有三个,需要注意一下,echarts.js体积最大,包含所有的图表和组件;echarts.common.js,体积适中,包含常见的图表和组件;echarts.simple.js,体积较小,仅包含最常用的图表和组件;
做数据统计的目的,是让数据说话,不用看繁多的数据记录,通过一个图表简单明了地把数据的趋势、历史曲线展现出来。既然如此,每个统计图表都有其特别的用途,每个图的用途不同,关注点自然也不同。
在ECharts中有多少统计图形呢,请看下图,仔细数一数,有二十多种,这还是单一的,不算复合的。
除了图表,还有坐标系;
组件也是很重要的一环,锦上添花的小物件;
折线图,用线条的升降表示事物的发展变化趋势;
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>myProject</title>
<script src="lib/jquery.min.js"></script>
<script src="lib/echarts.min.js"></script>
<!--以引用的方式调用theme,必须放置echarts文件后-->
<script src="lib/wonderland.js"></script>
</head>
<body>
<div id="main" style="width: 600px;height:400px;"></div>
<script>
var chart = echarts.init(document.getElementById('main'), 'wonderland');
var option = {
legend: {
left: 'center',
top: 'top'
},
dataset: {
// 提供一份数据。
source: [
['product', '橘子', '桃子', '苹果', '西瓜'],
['2012', 43.3, 85.8, 93.7, 65.8],
['2013', 83.1, 73.4, 55.1, 83.4,],
['2014', 86.4, 65.2, 82.5, 75.2,],
['2015', 72.4, 53.9, 39.1, 63.9,]
]
},
xAxis: {
type: 'category'
},
yAxis: {
type: 'value',
},
series: [
{type: 'line'},{type: 'line'},{type: 'line'},{type: 'line'}
]
};
chart.setOption(option);
</script>
</body>
</html>
饼图,以一个圆的面积表示总体,用扇形的面积表示部分在总体中所占的百分比;展示部分与总体的关系,部分相对于总数的大小。上面已有例子,这里忽略。
柱形图,条图,也是很常用的统计图,现在柱形图的展示方式也多了花样;
var chart = echarts.init(document.getElementById('main'), 'wonderland');
var option = {
legend: {},
tooltip: {},
dataset: {
source: [
['product', '2012', '2013', '2014', '2015'],
['Matcha Latte', 41.1, 30.4, 65.1, 53.3],
['Milk Tea', 86.5, 92.1, 85.7, 83.1],
['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4]
]
},
xAxis: [
{type: 'category', gridIndex: 0},
{type: 'category', gridIndex: 1}
],
yAxis: [
{gridIndex: 0},
{gridIndex: 1}
],
grid: [
{bottom: '55%'},
{top: '55%'}
],
series: [
// 这几个系列会在第一个直角坐标系中,每个系列对应到 dataset 的每一行。
{type: 'bar', seriesLayoutBy: 'row'},
{type: 'bar', seriesLayoutBy: 'row'},
{type: 'bar', seriesLayoutBy: 'row'},
// 这几个系列会在第二个直角坐标系中,每个系列对应到 dataset 的每一列。
{type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
{type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
{type: 'bar', xAxisIndex: 1, yAxisIndex: 1},
{type: 'bar', xAxisIndex: 1, yAxisIndex: 1}
]
}
chart.setOption(option);
饼图和折线图的完美结合;
var chart = echarts.init(document.getElementById('main'), 'wonderland');
var option = {
legend: {},
tooltip: {
trigger: 'axis',
showContent: false
},
dataset: {
source: [
['product', '2012', '2013', '2014', '2015', '2016', '2017'],
['Matcha Latte', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
['Milk Tea', 86.5, 92.1, 85.7, 83.1, 73.4, 55.1],
['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4, 65.2, 82.5],
['Walnut Brownie', 55.2, 67.1, 69.2, 72.4, 53.9, 39.1]
]
},
xAxis: {type: 'category'},
yAxis: {gridIndex: 0},
grid: {top: '55%'},
series: [
{type: 'line', smooth: true, seriesLayoutBy: 'row'},
{type: 'line', smooth: true, seriesLayoutBy: 'row'},
{type: 'line', smooth: true, seriesLayoutBy: 'row'},
{type: 'line', smooth: true, seriesLayoutBy: 'row'},
{
type: 'pie',
id: 'pie',
radius: '30%',
center: ['50%', '25%'],
label: {
formatter: '{b}: {@2012} ({d}%)'
},
encode: {
itemName: 'product',
value: '2012',
tooltip: '2012'
}
}
]
};
chart.on('updateAxisPointer', function (event) {
var xAxisInfo = event.axesInfo[0];
if (xAxisInfo) {
var dimension = xAxisInfo.value + 1;
chart.setOption({
series: {
id: 'pie',
label: {
formatter: '{b}: {@[' + dimension + ']} ({d}%)'
},
encode: {
value: dimension,
tooltip: dimension
}
}
});
}
});
chart.setOption(option);
基础概念一览
echarts 实例,一个网页中可以有多个实例;
系列(series),一个实例里有多个系列,每个系列的type可以是line(折线图)、bar(柱状图)、pie(饼图)、scatter(散点图)、graph(关系图)、tree(树图)等其中的一种;
组件(component):xAxis(直角坐标系 X 轴)、yAxis(直角坐标系 Y 轴)、grid(直角坐标系底板)、angleAxis(极坐标系角度轴)、radiusAxis(极坐标系半径轴)、polar(极坐标系底板)、geo(地理坐标系)、dataZoom(数据区缩放组件)、visualMap(视觉映射组件)、tooltip(提示框组件)、toolbox(工具栏组件)、series(系列)这些都属于组件;
option 描述图表:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。
组件之间的定位需要靠坐标系,坐标系又有直角坐标系(grid)、极坐标系(polar)、地理坐标系(GEO)、单轴坐标系(singleAxis)、日历坐标系(calendar);
一句话的概括:
一个页面上可以有多个echarts 实例,一个echarts 实例中包含多个系列(series),系列需要运行在坐标系上,还有零零碎碎的很多组件(component),系列、组件都被装在option容器里面,通过最后的设置option,就渲染成了图表。
更多精彩,请参考以下文档
github下载地址:https://github.com/apache/incubator-echarts/releases
EChats下载地址:https://echarts.apache.org/zh/download.html
EChats文档:https://echarts.apache.org/zh/tutorial.html
主题的设定:https://echarts.baidu.com/theme-builder/
官网: https://echarts.baidu.com/index.html
常见问题: https://www.echartsjs.com/zh/faq.html
菜鸟教程: https://www.runoob.com/echarts/echarts-tutorial.html
统计效果实现的参考: http://www.zi-han.net/theme/hplus/