# ana-charts
echarts 扩展
## 安装
```
npm i @analysys/ana-charts
```
## 特性
- 统一的数据结构
- 支持 ECharts 原生操作
## 快速开始
### 全量导入
```html
```
### 按需导入
```html
```
## APIs
### 一般用法
``` js
const myChart = Chart.line(el, data, options)
// const myChart = Chart.bar(el, data, options)
// const myChart = Chart.pie(el, data, options)
// const myChart = Chart.radar(el, data, options)
// const myChart = Chart.funnel(el, data, options)
// const myChart = Chart.scatter(el, data, options)
// 刷新数据
myChart.setData(data)
```
### 注入属性
``` js
// 以 line 折线图为例,bar、funnel、pie、scatter 均可使用
Chart.line(el, data, {
insertSeries: [
{
// index 可选 `all`,`start`,`end`,也可指定需要被注入的索引数组,如 [0, 2, 4]
index: 'all',
// 以下属性会被注入到指定的序列中
areaStyle: {}
}
]
})
```
### ECharts 对象
> 初始化图表后返回的对象上保存了 ECharts 对象的引用,可以通过该属性来设置图表配置和监听事件
``` js
const myChart = Chart.line(el, data, options)
// 设置可配置项
myChart.echart.setOption({
// 与 ECharts 参考文档用法一致
})
```
### 折线图
#### 基本用法
``` js
Chart.line('#chart', [
{ key: 'Monday', value: 1 },
{ key: 'Tuesday', value: 2 },
{ key: 'Wednesday', value: 3 },
...
])
```
#### 多条折线图
``` js
Chart.line('#chart', [
{ typeName: 'apple', key: 'Monday', value: 1 },
{ typeName: 'apple', key: 'Tuesday', value: 2 },
{ typeName: 'apple', key: 'Wednesday', value: 3 },
{ typeName: 'pear', key: 'Monday', value: 11 },
{ typeName: 'pear', key: 'Tuesday', value: 21 },
{ typeName: 'pear', key: 'Wednesday', value: 31 },
{ typeName: 'banana', key: 'Monday', value: 31 },
{ typeName: 'banana', key: 'Tuesday', value: 32 },
{ typeName: 'banana', key: 'Wednesday', value: 33 },
...
])
```
#### options 可配置参数
| 属性 | 说明 | required | 类型 | 默认值 |
| :----| :------| :--------| :---:| :------|
| title | 图表标题 | - | String | '单条折线图' 或 '多条折线图' |
| keyMap | 数据列表的属性字典 | - | Object | 详见后续属性 |
| keyMap.xAxisKey | x 轴对应的属性名称 | - | String | 'key' |
| keyMap.dataKey | 数据值对应的属性名称 | - | String | 'value' |
| keyMap.legendKey | 图例对应的属性名称 | - | String | 'typeName' |
| reverseAxis | 是否为横向图 | - | Boolean | false |
### 柱状图
#### 基本用法
``` js
Chart.bar('#chart', [
{ key: 'Monday', value: 1 },
{ key: 'Tuesday', value: 2 },
{ key: 'Wednesday', value: 3 },
...
])
```
#### 多条柱状图
``` js
Chart.bar('#chart', [
{ typeName: 'apple', key: 'Monday', value: 1 },
{ typeName: 'apple', key: 'Tuesday', value: 2 },
{ typeName: 'apple', key: 'Wednesday', value: 3 },
{ typeName: 'pear', key: 'Monday', value: 11 },
{ typeName: 'pear', key: 'Tuesday', value: 21 },
{ typeName: 'pear', key: 'Wednesday', value: 31 },
{ typeName: 'banana', key: 'Monday', value: 31 },
{ typeName: 'banana', key: 'Tuesday', value: 32 },
{ typeName: 'banana', key: 'Wednesday', value: 33 },
...
])
```
#### 折柱混合图
``` js
Chart.bar('#chart', [
{ typeName: 'apple', key: 'Monday', value: 1 },
{ typeName: 'apple', key: 'Tuesday', value: 2 },
{ typeName: 'apple', key: 'Wednesday', value: 3 },
{ typeName: 'pear', key: 'Monday', value: 11 },
{ typeName: 'pear', key: 'Tuesday', value: 21 },
{ typeName: 'pear', key: 'Wednesday', value: 31 },
{ typeName: 'banana', key: 'Monday', value: 31 },
{ typeName: 'banana', key: 'Tuesday', value: 32 },
{ typeName: 'banana', key: 'Wednesday', value: 33 },
...
], {
lineTypes: ['banana']
})
```
#### 时间轴柱状图
``` js
Chart.bar('#chart', [
{ timeline: 2015, typeName: 'apple', key: 'Monday', value: 1 },
{ timeline: 2015, typeName: 'apple', key: 'Tuesday', value: 2 },
{ timeline: 2015, typeName: 'apple', key: 'Wednesday', value: 3 },
{ timeline: 2015, typeName: 'pear', key: 'Monday', value: 11 },
{ timeline: 2015, typeName: 'pear', key: 'Tuesday', value: 21 },
{ timeline: 2015, typeName: 'pear', key: 'Wednesday', value: 31 },
{ timeline: 2015, typeName: 'banana', key: 'Monday', value: 31 },
{ timeline: 2015, typeName: 'banana', key: 'Tuesday', value: 32 },
{ timeline: 2015, typeName: 'banana', key: 'Wednesday', value: 33 },
{ timeline: 2016, typeName: 'apple', key: 'Monday', value: 1 },
{ timeline: 2016, typeName: 'apple', key: 'Tuesday', value: 2 },
{ timeline: 2016, typeName: 'apple', key: 'Wednesday', value: 3 },
{ timeline: 2016, typeName: 'pear', key: 'Monday', value: 11 },
{ timeline: 2016, typeName: 'pear', key: 'Tuesday', value: 21 },
{ timeline: 2016, typeName: 'pear', key: 'Wednesday', value: 31 },
{ timeline: 2016, typeName: 'banana', key: 'Monday', value: 31 },
{ timeline: 2016, typeName: 'banana', key: 'Tuesday', value: 32 },
{ timeline: 2016, typeName: 'banana', key: 'Wednesday', value: 33 },
...
], {
// 可以使用 $timeline 进行占位,该字符串将替换为 timeline 属性的值
title: '$timeline时间轴柱状图'
})
```
#### options 可配置参数
| 属性 | 说明 | required | 类型 | 默认值 |
| :----| :------| :--------| :---:| :------|
| title | 图表标题 | - | String | '单条柱状图' 或 '多条柱状图' |
| keyMap | 数据列表的属性字典 | - | Object | 详见后续属性 |
| keyMap.xAxisKey | x 轴对应的属性名称 | - | String | 'key' |
| keyMap.dataKey | 数据值对应的属性名称 | - | String | 'value' |
| keyMap.legendKey | 图例对应的属性名称 | - | String | 'typeName' |
| keyMap.timelineKey | 时间轴对应的属性名称 | - | String | 'timeline' |
| reverseAxis | 是否为横向图 | - | Boolean | false |
| stack | 是否为堆叠图 | - | Boolean | false |
| lineTypes | 折柱混合图中折线数据对应的图例名称数组 | - | Array | - |
| yAxis | 自定义的 y 轴,请参考 echarts 配置 | - | Object | - |
### 饼状图
#### 基本用法
``` js
Chart.pie('#chart', [
{ key: 'Monday', value: 1 },
{ key: 'Tuesday', value: 2 },
{ key: 'Wednesday', value: 3 },
...
])
```
#### 环形图
``` js
Chart.pie('#chart', [
{ key: 'Monday', value: 1 },
{ key: 'Tuesday', value: 2 },
{ key: 'Wednesday', value: 3 },
...
], {
ring: true
})
```
#### options 可配置参数
| 属性 | 说明 | required | 类型 | 默认值 |
| :----| :------| :--------| :---:| :------|
| title | 图表标题 | - | String | '饼图' |
| keyMap | 数据列表的属性字典 | - | Object | 详见后续属性 |
| keyMap.textKey | 文本对应的属性名称 | - | String | 'key' |
| keyMap.dataKey | 数据值对应的属性名称 | - | String | 'value' |
| ring | 是否环形图 | - | Boolean | false |
### 雷达图
#### 基本用法
``` js
Chart.radar('#chart', [
{ typeName: 'apple', key: 'Monday', value: 1 },
{ typeName: 'apple', key: 'Tuesday', value: 2 },
{ typeName: 'apple', key: 'Wednesday', value: 3 },
{ typeName: 'pear', key: 'Monday', value: 11 },
{ typeName: 'pear', key: 'Tuesday', value: 21 },
{ typeName: 'pear', key: 'Wednesday', value: 31 },
{ typeName: 'banana', key: 'Monday', value: 31 },
{ typeName: 'banana', key: 'Tuesday', value: 32 },
{ typeName: 'banana', key: 'Wednesday', value: 33 },
...
])
```
#### options 可配置参数
| 属性 | 说明 | required | 类型 | 默认值 |
| :----| :------| :--------| :---:| :------|
| title | 图表标题 | - | String | '雷达图' |
| keyMap | 数据列表的属性字典 | - | Object | 详见后续属性 |
| keyMap.textKey | 指标对应的属性名称 | - | String | 'key' |
| keyMap.dataKey | 数据值对应的属性名称 | - | String | 'value' |
| keyMap.legendKey | 图例对应的属性名称 | - | String | 'typeName' |
### 漏斗图
#### 基本用法
``` js
Chart.funnel('#chart', [
{ key: 'Monday', value: 1 },
{ key: 'Tuesday', value: 2 },
{ key: 'Wednesday', value: 3 },
...
])
```
#### options 可配置参数
| 属性 | 说明 | required | 类型 | 默认值 |
| :----| :------| :--------| :---:| :------|
| title | 图表标题 | - | String | '漏斗图' |
| keyMap | 数据列表的属性字典 | - | Object | 详见后续属性 |
| keyMap.textKey | 文本对应的属性名称 | - | String | 'key' |
| keyMap.dataKey | 数据值对应的属性名称 | - | String | 'value' |
### 气泡图
#### 基本用法
``` js
Chart.scatter('#chart', [
{ typeName: 'apple', text: 'Monday', x: 1, y: 1, size: 1 },
{ typeName: 'apple', text: 'Tuesday', x: 2, y: 2, size: 2 },
{ typeName: 'apple', text: 'Wednesday', x: 3, y: 3, size: 3 },
{ typeName: 'pear', text: 'Monday', x: 11, y: 11, size: 11 },
{ typeName: 'pear', text: 'Tuesday', x: 21, y: 21, size: 21 },
{ typeName: 'pear', text: 'Wednesday', x: 31, y: 31, size: 31 },
{ typeName: 'banana', text: 'Monday', x: 31, y: 31, size: 31 },
{ typeName: 'banana', text: 'Tuesday', x: 32, y: 32, size: 32 },
{ typeName: 'banana', text: 'Wednesday', x: 33, y: 33, size: 33 },
...
])
```
#### options 可配置参数
| 属性 | 说明 | required | 类型 | 默认值 |
| :----| :------| :--------| :---:| :------|
| title | 图表标题 | - | String | '气泡图' |
| keyMap | 数据列表的属性字典 | - | Object | 详见后续属性 |
| keyMap.xKey | x 坐标对应的属性名称 | - | String | 'x' |
| keyMap.yKey | y 坐标对应的属性名称 | - | String | 'y' |
| keyMap.sizeKey | 气泡大小对应的属性名称 | - | String | 'size' |
| keyMap.textKey | 气泡文本对应的属性名称 | - | String | 'text' |
| keyMap.legendKey | 图例对应的属性名称 | - | String | 'typeName' |
### 全局配置
#### 主题
注册并按需使用
``` js
import themeData from './theme.json'
// 注册主题
Chart.config({
theme: {
name: 'themeName',
data: themeData
}
})
// 使用主题
Chart.line('#chart', data, { theme: 'themeName' })
```
注册并全局使用
``` js
import themeData from './theme.json'
// 注册为默认主题后,所有的图表均使用该主题,不需要特别指定
Chart.config({
theme: {
name: 'themeName',
data: themeData,
default: true
}
})
```
### 实例 API
| 方法 | 说明 | 参数 | 参数类型 | 返回值 |
| :----| :------| :--------| :---:| :------|
| setData | 重新设置数据 | data | Array | - |
## License
[MIT](http://opensource.org/licenses/MIT)