基础概念
项目里使用npm安装echarts依赖包
npm install echarts
在要使用的地方引入
import * as echarts from 'echarts'
初始化
echrats提供的初始化接口是echarts.init
初始化方法里面要绑定容器 ,容器的概念其实就是一个又固定宽高的html节点。初始化的时候传入该节点(doucument.getElementById(‘xxx’));
const chart = echarts.init(document.getElementById('bingchart'))
1.如果绑定的节点没有宽度高度,没办法渲染出图表。图表的宽高默认是绑定节点的宽高。没有指定宽高的报错如下
[ECharts] Can’t get DOM width or height. Please check dom.clientWidth and dom.clientHeight. They should not be 0.For example, you may need to call this in the callback of window.onload.
2.如果想要图表响应页面进行变化图表也有提供方法 给页面添加resize事件并调用echarts实例的方法
window.addEventListener('resize', function() {
chart.resize();//什么都不传默认图表大小 也可以传宽高
/*chart.resize({
width: 800,
height: 400
});*/
});
3.假设页面中存在多个标签页,每个标签页都包含一些图表。当选中一个标签页的时候,其他标签页1的内容在dom中被移除,当用户再选中这些标签页的时候,就会发现图表不见了。
在容器节点被销毁时。勇敢页销毁图表
chart.dispose ()
样式(颜色)
1.颜色可以用一个数组写在配置项外边 然后再配置的时候引入这个数组。(可以定义一个,也可以定义多个)
2.颜色也可以写在数据集里[{value:xxx,color:‘red’}]
3.可以通过配置项设置一些别的颜色如高亮颜色之类的
option = {
series: {
type: 'scatter',
// 普通样式。
itemStyle: {
// 点的颜色。
color: 'red'
},
label: {
show: true,
// 标签的文字。
formatter: 'This is a normal label.'
},
// 高亮样式。
emphasis: {
itemStyle: {
// 高亮时点的颜色。
color: 'blue'
},
label: {
show: true,
// 高亮时标签的文字。
formatter: 'This is a emphasis label.'
}
}
}
};
数据集(dataset)
数据集和xAxis平级
数据集是专门用来管理数据的组件。虽然每个系列都可以在series.data中设置数据。但是数据集可以被多个组件复用。
数据集的source可以是数组形式也可以是对象数组格式
1.数组形式下0位置会被忽略渲染 它作为渲染的一个参照 不作为数值渲染
2.对象数组形式下都会渲染,需要配置一个dimensions 完成映射
dataset: {
// 用 dimensions 指定了维度的顺序。直角坐标系中,如果 X 轴 type 为 category,
// 默认把第一个维度映射到 X 轴上,后面维度映射到 Y 轴上。
// 如果不指定 dimensions,也可以通过指定 series.encode
// 完成映射,参见后文。
dimensions: ['product', '2015', '2016', '2017'], //可以是数组也可以是对象形式的
/*
dimensions: [
{ name: 'score' },
// 可以简写为 string ,表示 dimension name 。
'amount',
// 可以在 type 中指定维度类型。
{ name: 'product', type: 'ordinal' }
],
}
*/
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 }
]
},
3.使用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
}
数据转换(
var option = {
dataset: [
{
// 这个 dataset 的 index 是 `0`。
source: [
['Product', 'Sales', 'Price', 'Year'],
['Cake', 123, 32, 2011],
['Cereal', 231, 14, 2011],
['Tofu', 235, 5, 2011],
['Dumpling', 341, 25, 2011],
['Biscuit', 122, 29, 2011],
['Cake', 143, 30, 2012],
['Cereal', 201, 19, 2012],
['Tofu', 255, 7, 2012],
['Dumpling', 241, 27, 2012],
['Biscuit', 102, 34, 2012],
['Cake', 153, 28, 2013],
['Cereal', 181, 21, 2013],
['Tofu', 395, 4, 2013],
['Dumpling', 281, 31, 2013],
['Biscuit', 92, 39, 2013],
['Cake', 223, 29, 2014],
['Cereal', 211, 17, 2014],
['Tofu', 345, 3, 2014],
['Dumpling', 211, 35, 2014],
['Biscuit', 72, 24, 2014]
]
// id: 'a'
},
{
// 这个 dataset 的 index 是 `1`。
// 这个 `transform` 配置,表示,此 dataset 的数据,来自于此 transform 的结果。
transform: {
type: 'filter',
config: { dimension: 'Year', value: 2011 }
}
// 我们还可以设置这些可选的属性: `fromDatasetIndex` 或 `fromDatasetId`。
// 这些属性,指定了,transform 的输入,来自于哪个 dataset。例如,
// `fromDatasetIndex: 0` 表示输入来自于 index 为 `0` 的 dataset 。又例如,
// `fromDatasetId: 'a'` 表示输入来自于 `id: 'a'` 的 dataset。
// 当这些属性都不指定时,默认认为,输入来自于 index 为 `0` 的 dataset 。
},
{
// 这个 dataset 的 index 是 `2`。
// 同样,这里因为 `fromDatasetIndex` 和 `fromDatasetId` 都没有被指定,
// 那么输入默认来自于 index 为 `0` 的 dataset 。
transform: {
// 这个类型为 "filter" 的 transform 能够遍历并筛选出满足条件的数据项。
type: 'filter',
// 每个 transform 如果需要有配置参数的话,都须配置在 `config` 里。
// 在这个 "filter" transform 中,`config` 用于指定筛选条件。
// 下面这个筛选条件是:选出维度( dimension )'Year' 中值为 2012 的所有
// 数据项。
config: { dimension: 'Year', value: 2012 }
}
},
{
// 这个 dataset 的 index 是 `3`。
transform: {
type: 'filter',
config: { dimension: 'Year', value: 2013 }
}
}
],
series: [
{
type: 'pie',
radius: 50,
center: ['25%', '50%'],
// 这个饼图系列,引用了 index 为 `1` 的 dataset 。也就是,引用了上述
// 2011 年那个 "filter" transform 的结果。
datasetIndex: 1
},
{
type: 'pie',
radius: 50,
center: ['50%', '50%'],
datasetIndex: 2
},
{
type: 'pie',
radius: 50,
center: ['75%', '50%'],
datasetIndex: 3
}
]
};
数据转换(transform)
版本5点多开始支持这个 ,通过已有的数据集生成新的数据集 特点有很多
1.把数据分成多份用不同的饼图展现
2.进行一些数据统计运算,并展示结果
3.用某学数据可视化算法处理数据,并展示结果
4.数据排序
5.去除或直选择数据项
基础使用的代码如下
var option = {
dataset: [
{
// 这个 dataset 的 index 是 `0`。
source: [
['Product', 'Sales', 'Price', 'Year'],
['Cake', 123, 32, 2011],
['Cereal', 231, 14, 2011],
['Tofu', 235, 5, 2011],
['Dumpling', 341, 25, 2011],
['Biscuit', 122, 29, 2011],
['Cake', 143, 30, 2012],
['Cereal', 201, 19, 2012],
['Tofu', 255, 7, 2012],
['Dumpling', 241, 27, 2012],
['Biscuit', 102, 34, 2012],
['Cake', 153, 28, 2013],
['Cereal', 181, 21, 2013],
['Tofu', 395, 4, 2013],
['Dumpling', 281, 31, 2013],
['Biscuit', 92, 39, 2013],
['Cake', 223, 29, 2014],
['Cereal', 211, 17, 2014],
['Tofu', 345, 3, 2014],
['Dumpling', 211, 35, 2014],
['Biscuit', 72, 24, 2014]
]
// id: 'a'
},
{
// 这个 dataset 的 index 是 `1`。
// 这个 `transform` 配置,表示,此 dataset 的数据,来自于此 transform 的结果。
transform: {
type: 'filter',
config: { dimension: 'Year', value: 2011 }
}
// 我们还可以设置这些可选的属性: `fromDatasetIndex` 或 `fromDatasetId`。
// 这些属性,指定了,transform 的输入,来自于哪个 dataset。例如,
// `fromDatasetIndex: 0` 表示输入来自于 index 为 `0` 的 dataset 。又例如,
// `fromDatasetId: 'a'` 表示输入来自于 `id: 'a'` 的 dataset。
// 当这些属性都不指定时,默认认为,输入来自于 index 为 `0` 的 dataset 。
},
{
// 这个 dataset 的 index 是 `2`。
// 同样,这里因为 `fromDatasetIndex` 和 `fromDatasetId` 都没有被指定,
// 那么输入默认来自于 index 为 `0` 的 dataset 。
transform: {
// 这个类型为 "filter" 的 transform 能够遍历并筛选出满足条件的数据项。
type: 'filter',
// 每个 transform 如果需要有配置参数的话,都须配置在 `config` 里。
// 在这个 "filter" transform 中,`config` 用于指定筛选条件。
// 下面这个筛选条件是:选出维度( dimension )'Year' 中值为 2012 的所有
// 数据项。
config: { dimension: 'Year', value: 2012 }
}
},
{
// 这个 dataset 的 index 是 `3`。
transform: {
type: 'filter',
config: { dimension: 'Year', value: 2013 }
}
}
],
series: [
{
type: 'pie',
radius: 50,
center: ['25%', '50%'],
// 这个饼图系列,引用了 index 为 `1` 的 dataset 。也就是,引用了上述
// 2011 年那个 "filter" transform 的结果。
datasetIndex: 1
},
{
type: 'pie',
radius: 50,
center: ['50%', '50%'],
datasetIndex: 2
},
{
type: 'pie',
radius: 50,
center: ['75%', '50%'],
datasetIndex: 3
}
]
};
上图的这个转换的对数据多少还是有点要求的 觉得看配置项麻烦的话 其实还是可以选择自己硬写的 嘿嘿
坐标轴
二维图表 大概都分为x轴和y轴吧
在echrats x轴(xAxis)和y轴(yAxis)都由轴线,刻度,刻度标签,轴标题四个部分组成。部分图表中还会有网格线来帮助查看和计算数据。
配置项对应表
配置项 | 意义 |
---|---|
轴线 | axisLine |
刻度 | axisTick |
刻度标签 | axisLabel |
轴标题 | name |
常用图表类型
图表名称 | type配置项 | 实现方式 |
---|---|---|
基础柱状图 | bar | series里面只有一项 |
多系列柱状图 | bar | series有多项 |
堆叠柱状图 | bar | series有多项且每项配置堆叠的轴(stack: ‘x’) |
基础折线图 | line | – |
堆叠折线图 | line | – |
平滑折线图 | line | smooth:true |
阶梯折线图 | line | step: start/middle/end |
区域折线图 | line | areaStyle:{} |
基础饼图 | pie | –(饼图没有轴) |
圆环图 | pie | radius: [‘40%’, ‘70%’] |
南丁格尔玫瑰图 | pie | roseType: ‘area’ |
基础散点图 | scatter | – |
tips:setOption 可以让图表重新渲染 series通过name匹配
/ 异步加载数据
$.get('data.json').done(function(data) {
// 填入数据
myChart.setOption({
xAxis: {
data: data.categories
},
series: [
{
// 根据名字对应到相应的系列
name: '销量',
data: data.data
}
]
});
});
配置项
下面就开始配置项的学习啦 以下为options的第一层
配置项 | 解释 |
---|---|
title | 标题组件,包含主标题和副标题。 |
legend | 图例组件,控制多系列的显示和隐藏 |
grid | 直角坐标系内绘图网格,单个 grid 内最多可以放置上下两个 X 轴,左右两个 Y 轴 |
xAxis | X轴 |
yAxis | y轴 |
polar | 极坐标系,可以用于散点图和折线图。每个极坐标系拥有一个角度轴和一个半径轴 |
radiusAxis | 极坐标系的径向轴。 |
angleAxis | 极坐标的角度轴 |
radar | 雷达坐标系组件 只适用于雷达 |
dataZoom | 组件 用于区域缩放,从而能自由关注细节的数据信息,或者概览数据整体,或者去除离群点的影响 |
visualMap | 是视觉映射组件,用于进行『视觉编码』,也就是将数据映射到视觉元素(视觉通道)。 |
tooltip | 提示框组件 |
axisPointer | 坐标轴的全局公用设置 |
toolbox | 工具栏。内置有导出图片,数据视图,动态类型切换,数据区域缩放,重置五个工具。 |
brush | 是区域选择组件,用户可以选择图中一部分数据,从而便于向用户展示被选中数据,或者他们的一些统计计算结果。 |
geo | 地理坐标系组件。 |
parallel | 平行坐标系 |
parallelAxis | 平行坐标系的坐标轴 |
singleAxis | 单轴。可以被应用到散点图中展现一维数据 |
timeLine | 提供了在多个 ECharts option 间进行切换、播放等操作的功能 |
graphic | 原生图形元素组件。可以支持的图形元素包括:image, text, circle, sector, ring, polygon, polyline, rect, line, bezierCurve, arc, group |
calendar | 日历坐标系组件。 |
dataset | 数据集 |
serise | 配置项 |
darkMode | 是否是暗黑模式,默认会根据背景色 backgroundColor 的亮度自动设置。 如果是设置了容器的背景色而无法判断到,就可以使用该配置手动指echart会根据是否是暗黑模式调整文本等的颜色。 |
color | 调色盘颜色列表。如果系列没有设置颜色,则会依次循环从该列表中取颜色作为系列颜色 |
backgroundColor | 背景色,默认无背景。 |
textStyle | 全局字体样式 |
animation | 是否开启动画 默认开启 |
animationThreshold | 是否开启动画的阈值,当单个系列显示的图形数量大于这个阈值时会关闭动画。 |
animationDuration | 初始动画时长 |
animationEasing | 初始动画的缓动效果 |
animationDelay | 初始动画的延迟 |
animationDurationUpdate | 数据更新动画的时长 |
animationEasingUpdate | 数据更新动画的缓动效果 |
animationDelayUpdate | 数据更新动画的延迟 |
stateAnimation | 状态切换的动画配置,支持在每个系列里设置单独针对该系列的配置。 |
blendMode | 图形的混合模式 |
hoverLayerThreshold | 图形数量阈值 |
useUTC | 是否使用utc时间 |
图表大类
配置项 | 解释 |
---|---|
line | 折线图 |
bar | 柱状图 |
pie | 饼图 |
scatter | 散点图(气泡图) |
effectScatter | 带有涟漪效果的散点图(气泡图) |
radar | 雷达图 |
tree | 树图 |
treemap | 层级数据 树形数据 |
sunburst | 旭日图 |
boxplot | 『箱形图』、『盒须图』、『盒式图』、『盒状图』、『箱线图』 |
candlestick | K线图 |
heatmap | 热力图 |
map | 地图 |
parallel | 平行坐标 |
lines | 路径图 |
graph | 关系图 |
sankey | 桑葚图 |
funnel | 漏斗图 |
guage | 仪表盘 |
pictorialBar | 象形柱图 |
themeRiver | 主题河流 |
custom | 自定义系列 |
–未完待续–