ECharts
Posted 小企鹅推雪球!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ECharts相关的知识,希望对你有一定的参考价值。
文章目录
ECharts 数据集
- 数据集(dataset)是专门用来管理数据的组件。虽然每个系列都可以在 series.data 中设置数据,但是从 ECharts4 支持 数据集 开始,更推荐使用 数据集 来管理数据
- 数据可以被多个组件复用,也方便进行 “数据和其他配置” 分离的配置风格
ECharts 在系列中设置数据
-
在 系列
(series)
中设置数据option = xAxis: type: 'category', data: ['Matcha Latte', 'Milk Tea', 'Cheese Cocoa', 'Walnut Brownie'] , yAxis: , series: [ type: 'bar', name: '2015', data: [89.3, 92.1, 94.4, 85.4] , type: 'bar', name: '2016', data: [95.8, 89.4, 91.2, 76.9] , type: 'bar', name: '2017', data: [97.7, 83.1, 92.5, 78.1] ] ;
-
在系列中设置数据的优点:
- 对一些特殊的数据结构(如“树”、“图”、超大数据)进行一定的数据类型定制
-
在系列中设置数据的缺点:
- 需要用户先处理数据,把数据分割设置到各个系列(和类目轴)中
- 不利于多个系列共享一份数据,也不利于基于原始数据进行图表类型、系列的映射安排
ECharts 在数据集中设置数据
-
ECharts 在数据集
(dataset)
中设置数据的优点- 贴近数据可视化常见思维方式:(I)提供数据,(II)指定数据到视觉的映射,从而形成图表
- 数据和其他配置可以被分离开来
- 数据可以被多个系列或者组件复用
- 支持更多的数据的常用格式,例如二维数组、对象数组等
-
简单的 dataset 的例子:
option = legend: , tooltip: , dataset: // 提供一份数据。 source: [ ['product', '2015', '2016', '2017'], ['Matcha Latte', 43.3, 85.8, 93.7], ['Milk Tea', 83.1, 73.4, 55.1], ['Cheese Cocoa', 86.4, 65.2, 82.5], ['Walnut Brownie', 72.4, 53.9, 39.1] ] , // 声明一个 X 轴,类目轴(category)。默认情况下,类目轴对应到 dataset 第一列。 xAxis: type: 'category' , // 声明一个 Y 轴,数值轴。 yAxis: , // 声明多个 bar 系列,默认情况下,每个系列会自动对应到 dataset 的每一列。 series: [ type: 'bar' , type: 'bar' , type: 'bar' ] ;
-
使用常见的“对象数组”的格式:
option = legend: , tooltip: , dataset: // 用 dimensions 指定了维度的顺序。直角坐标系中,如果 X 轴 type 为 category, // 默认把第一个维度映射到 X 轴上,后面维度映射到 Y 轴上。 // 如果不指定 dimensions,也可以通过指定 series.encode,完成映射 dimensions: ['product', '2015', '2016', '2017'], source: [ product: 'Matcha Latte', '2015': 43.3, '2016': 85.8, '2017': 93.7 , product: 'Milk Tea', '2015': 83.1, '2016': 73.4, '2017': 55.1 , product: 'Cheese Cocoa', '2015': 86.4, '2016': 65.2, '2017': 82.5 , product: 'Walnut Brownie', '2015': 72.4, '2016': 53.9, '2017': 39.1 ] , xAxis: type: 'category' , yAxis: , series: [ type: 'bar' , type: 'bar' , type: 'bar' ] ;
ECharts 把数据集( dataset )的行或列映射为系列(series)
-
数据可视化的常见思路是:(I)提供数据,(II)指定数据到视觉的映射。
-
可以使用
seriesLayoutBy
配置项,改变图表对于行列的映射。 -
seriesLayoutBy
可取值:'column'
: 默认值。系列被安放到 dataset 的列上面'row'
: 系列被安放到 dataset 的行上面。
-
简单的样例
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 ] ;
ECharts 维度( dimension )
-
常用图表所描述的数据大部分是“二维表”结构
-
当把系列
( series )
对应到“列”的时候,那么每一列就称为一个“维度( dimension )
”,而每一行称为数据项( item )
-
把系列
( series )
对应到表行,那么每一行就是“维度dimension )
”,每一列就是数据项(item
) -
维度可以有单独的名字,维度名(
dimension name
)可以在定义在 dataset 的第一行(或者第一列),从第二行开始,才是正式的数据 -
dataset.source
中第一行(列)到底包含不包含维度名,ECharts 默认会自动探测。 -
可以设置
dataset.sourceHeader: true
显示声明第一行(列)就是维度或者dataset.sourceHeader: false
表明第一行(列)开始就直接是数据。 -
维度的定义,也可以使用单独的
dataset.dimensions
或者series.dimensions
来定义,可以同时指定维度名,和维度的类型( dimension type ):var option1 = dataset: dimensions: [ name: 'score' , // 可以简写为 string ,表示 dimension name 。 'amount', // 可以在 type 中指定维度类型。 name: 'product', type: 'ordinal' ], source: [ //... ] // ... ; var option2 = dataset: source: [ // ... ] , series: type: 'line', // series.dimensions 会更优先于 dataset.dimension 采纳。 dimensions: [ null, // 可以设置为 null 表示不想设置维度名 'amount', name: 'product', type: 'ordinal' ] // ... ;
-
维度类型( dimension type )可以取的值:
'number'
: 默认,表示普通数据'ordinal'
: 对于类目、文本这些 string 类型的数据,如果需要能在数轴上使用,须是'ordinal'
类型。ECharts 默认会试图自动判断这个类型。但是自动判断也可能不准确,所以使用者也可以手动强制指定。'time'
: 表示时间数据。设置成 ‘time’ 则能支持自动解析数据成时间戳(timestamp)'float':
如果设置成'float'
,在存储时候会使用 TypedArray,对性能优化有好处'int'
: 如果设置成'int'
,在存储时候会使用 TypedArray,对性能优化有好处。
数据到图形的映射( series.encode )
-
使用
series.encode
来做映射var option = dataset: source: [ ['score', 'amount', 'product'], [89.3, 58212, 'Matcha Latte'], [57.1, 78254, 'Milk Tea'], [74.4, 41032, 'Cheese Cocoa'], [50.1, 12755, 'Cheese Brownie'], [89.7, 20145, 'Matcha Cocoa'], [68.1, 79146, 'Tea'], [19.6, 91852, 'Orange Juice'], [10.6, 101852, 'Lemon Juice'], [32.7, 20112, 'Walnut Brownie'] ] , xAxis: , yAxis: type: 'category' , series: [ type: 'bar', encode: // 将 "amount" 列映射到 X 轴。 x: 'amount', // 将 "product" 列映射到 Y 轴。 y: 'product' ] ;
-
series.encode 声明的基本结构如下:
- 冒号左边是坐标系、标签等特定名称,如
'x', 'y', 'tooltip'
等 - 冒号右边是数据中的维度名(
string 格式
)或者维度的序号(number 格式,从 0 开始计数
),可以指定一个或多个维度(使用数组)
- 冒号左边是坐标系、标签等特定名称,如
-
series.encode 支持的属性如下;
// 在任何坐标系和系列中,都支持: encode: // 使用 “名为 product 的维度” 和 “名为 score 的维度” 的值在 tooltip 中显示 tooltip: ['product', 'score'] // 使用 “维度 1” 和 “维度 3” 的维度名连起来作为系列名。(有时候名字比较长,这可以避免在 series.name 重复输入这些名字) seriesName: [1, 3], // 表示使用 “维度2” 中的值作为 id。这在使用 setOption 动态更新数据时有用处,可以使新老数据用 id 对应起来,从而能够产生合适的数据更新动画。 itemId: 2, // 指定数据项的名称使用 “维度3” 在饼图等图表中有用,可以使这个名字显示在图例(legend)中。 itemName: 3 // 直角坐标系(grid/cartesian)特有的属性: encode: // 把 “维度1”、“维度5”、“名为 score 的维度” 映射到 X 轴: x: [1, 5, 'score'], // 把“维度0”映射到 Y 轴。 y: 0 // 单轴(singleAxis)特有的属性: encode: single: 3 // 极坐标系(polar)特有的属性: encode: radius: 3, angle: 2 // 地理坐标系(geo)特有的属性: encode: lng: 3, lat: 2 // 对于一些没有坐标系的图表,例如饼图、漏斗图等,可以是: encode: value: 3
常见的 series.encode 设置方式
-
第三列设置为 X 轴,第五列设置为 Y 轴
option = series: // 注意维度序号(dimensionIndex)从 0 开始计数,第三列是 dimensions[2]。 encode: x: 2, y: 4 // ... ;
-
第三行设置为 X 轴,第五行设置为 Y 轴
option = series: encode: x: 3, y: 5 , seriesLayoutBy: 'row' // ... ;
-
第 2 列和第 3 列显示在提示框(tooltip)中
option = series: encode: tooltip: [1, 2] // ... // ... ;
-
数据里没有维度名,给出维度名
var option = dataset: dimensions: ['score', 'amount'], source: [ [89.3, 3371], [92.1, 8123], [94.4, 1954], [85.4, 829] ] ;
-
把第三列映射为气泡图的点的大小
var option = dataset: source: [ [12, 323, 11.2], [23, 167, 8.3], [81, 284, 12], [91, 413, 4.1], [13, 287, 13.5] ] , visualMap: show: false, dimension: 2, // 指向第三列(列序号从 0 开始记,所以设置为 2)。 min: 2, // 需要给出数值范围,最小数值。 max: 15, // 需要给出数值范围,最大数值。 inRange: // 气泡尺寸:5 像素到 60 像素。 symbolSize: [5, 60] , xAxis: , yAxis: , series: type: 'scatter' ;
多个 dataset 以及如何引用他们
-
可以同时定义多个
dataset
。系列可以通过series.datasetIndex
来指定引用哪个dataset
var option = dataset: [ // 序号为 0 的 dataset。 source: [] , // 序号为 1 的 dataset。 source: [] , // 序号为 2 的 dataset。 source: [] ], series: [ // 使用序号为 2 的 dataset。 datasetIndex: 2 , // 使用序号为 1 的 dataset。 datasetIndex: 1 ] ;
-
目前并非所有图表都支持 dataset
-
支持 dataset 的图表有:
line、bar、pie、scatter、effectScatter、parallel、candlestick、map、funnel、custom。
以上是关于ECharts的主要内容,如果未能解决你的问题,请参考以下文章