echart從0到1Apache ECharts
一個基于 JavaScript 的開源可視化圖表庫, 這里記錄echart入門基礎概念和api使用
安裝
npm i -D echarts
// or
yarn add echarts
引入
import * as echarts from 'echarts'
// 安需引入
import { BarChart } from 'echarts
創建chart實例
const echart = ecahrts.init(element)
渲染
const options = {
title: { text: '標題名稱' },
// 圖例
legend: {},
// 提示器
tooltip: {},
// x軸
xAxis: {
// x軸分類,
data: ['type01', 'type02', 'type03']
},
// y軸
yAxis: {},
// 圖形映射
series: [
{
name: 'number',
// 圖表類型
type: 'bar',
// 數據, 順序與x軸類型一一對應
data: [10, 20, 30]
}
]
}
// 渲染
ecahrt.setOptions(options)
圖表基礎組成
- 圖表容器 element
- 圖例 legend
- 提示工具 tooltip
- 數據集合 data
- 圖例 chart
- 坐標系/坐標軸 axis
- 事件/行為 event/action
數據集合、轉換
除了通過獨立配置每一圖表數據, echart 提供 dataset
集中管理實例內的數據集合。
集合模式
數據的映射管理與集合的排列順序掛鉤
{
dataset: {
// 數據集合
source: [
// 第一列為 x軸分類
['product', '2015', '2016', '2017'],
// 以下為對應數據集合
['Matcha Latte', 43.3, 85.8, 93.7],
// 每條數據與x類型字段一一對應, 等價: { product: 'Matcha Latte', '2015': 43.3, '2016': '85.8', '2017': 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]
]
},
xAxis: { type: 'category' },
yAxis: {},
// 每條圖表聲明對應一條source數據
series: [{ type: 'bar' }, { type: 'bar' }, { type: 'bar' }]
}
[圖片上傳失敗...(image-57899-1633271812626)]
對象模式
數據的映射關系通過字段掛鉤
dataset: {
// x 軸字段順序
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' }]
修改行列映射
通過設置seriesLayoutBy
修改行或列的映射模式, 默認為: column
既 serices 的每一條對應數據內的一列
row
模式與 column 相反, serices 的每一條對應數據內的一行
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: [
// row 模式, 對應數據行數量
{ type: 'bar', seriesLayoutBy: 'row' },
{ type: 'bar', seriesLayoutBy: 'row' },
{ type: 'bar', seriesLayoutBy: 'row' },
// column 模式, 對應數據列數量
{ type: 'bar', xAxisIndex: 1, yAxisIndex: 1 },
{ type: 'bar', xAxisIndex: 1, yAxisIndex: 1 },
{ type: 'bar', xAxisIndex: 1, yAxisIndex: 1 },
{ type: 'bar', xAxisIndex: 1, yAxisIndex: 1 }
]
};
命名維度
可以使用dimensions
為各維度數據指定名稱, 方便在后續配置中指定具體的使用維度
dataset: [
dimensions: [
// 方式1: 純字符,將被賦值給name屬性
'product'
// 方式2:name屬性
{ name: 'product' }
// 方式3:指定具體的維度類型, 優先級低于series
{ name: 'product', type: 'ordinal' }
]
]
type類型:
number
數字ordinal
字符time
日期float
int
指定數據映射
通過encode
指定軸對應展示的數據
{
dataset: {
source: [
['score', 'amount', 'product'],
[89.3, 58212, 'Matcha Latte'],
[57.1, 78254, 'Milk Tea']
]
},
xAxis: {},
yAxis: { type: 'category' },
series: [
{
type: 'bar',
encode: {
// 將 "amount" 列映射到 X 軸。
x: 'amount',
// 將 "product" 列映射到 Y 軸。
y: 'product'
}
}
]
}
坐標軸
不同的圖表使用不同的坐標系,對應的設置項也不同。
一般分為:
- 直角坐標系[柱狀圖],
xAxis
yAxis
- 極坐標系[餅圖],
radiusAxis
angleAxis
- 雷達圖坐標系[雷達圖],
radar
- 平行坐標系[],
parallel
parallelAxis
- 單一軸/線性
singleAxis
- 地理坐標系[地圖],
geo
- 日歷坐標系[日歷組件]
calendar
坐標系一般配置項
{
// 直角坐標系
xAxis: {
// 坐標軸類型
type: 'category',
// 坐標軸標題
name: 'xxx',
// 坐標軸位置
position: 'top',
// 多個坐標軸之間的偏移量
offset: 10,
// 軸線
axisLine: {
// 線樣式
lineStyle: { type: 'deshed' }
},
// 刻度
axisTick: {
// 線樣式
lineStyle: { type: 'deshed' }
},
// 刻度標簽
axisLable: {
// 顯示格式
formatter: '{value}元'
}
}
}
樣式/ 主題
全局調色
{
// 圖表將根據排列順序獲取配色
color: [
'red',
'orange',
...
],
dataset: [
['product', '2014', '2015', '2016'],
[
'毛毯',
// red
10,
// 'orange'
20,
....
]
]
}
獨立調色
series: [
{
type: 'bar',
color: [ 'red', 'orange' ],
data: ['毛毯', 10, 20, 30] // 缺失的配色將使用默認色
}
]
// 全局調色優先級高于獨立調色
[圖片上傳失敗...(image-30c84b-1633271812626)]
細分樣式
不同組件或圖表存在細分的樣式配置屬性, 具體配置參考: 配置文檔
{
xAixs: {
// 標簽樣式
axisLabel: {
color: '#fff',
fontSize: 14
},
// 隱藏刻度線
axisTick: false
},
series: [
type: 'bar',
color: 'orange',
// 顯示柱狀圖背景
showBackground: true
]
}
高亮樣式
emphasis
鼠標滑入高亮樣式
{
series: {
emphasis: { .... }
}
}
使用內置主題
var chart = echarts.init(dom, 'dark');
導入主題
// json 主題
$.getJSON('主題文件地址.json', function(themeJSON) {
// 注冊主題
echarts.registerTheme('主題名稱', JSON.parse(themeJSON));
// 使用主題
var chart = echarts.init(dom, '主題名稱');
});
// umd 主題
import '../主題文件.js'
// 使用主題
var chart = echarts.init(dom, '主題名稱');
交互| 事件、行為
綁定事件
cosnt chart = echarts.init(...)
chart.on('click', (params) => {....})
區分觸發區域
myChart.on('click', function(params) {
if (params.componentType === 'markPoint') {
// 點擊到了 markPoint 上
if (params.seriesIndex === 5) {
// 點擊到了 index 為 5 的 series 的 markPoint 上。
}
} else if (params.componentType === 'series') {
if (params.seriesType === 'graph') {
if (params.dataType === 'edge') {
// 點擊到了 graph 的 edge(邊)上。
} else {
// 點擊到了 graph 的 node(節點)上。
}
}
}
});
指定可觸發區域
// 單一區域
const query = 'series.line',
// or
// 多區域
const query = {
${mainType}Index: number // 組件 index
${mainType}Name: string // 組件 name
${mainType}Id: string // 組件 id
dataIndex: number // 數據項 index
name: string // 數據項 name
dataType: string // 數據項 type,如關系圖中的 'node', 'edge'
element: string // 自定義系列中的 el 的 name
}
// 綁定區域
chart.on('click', query, function() {});
主動觸發事件
chart.dispatchActon({
type: 'hightlight', // 事件類型
seriesIndex: 0, // 觸發圖表
dataIndex: currentIndex // 數據項
})
富文本標簽
[圖片上傳失敗...(image-373852-1633271812626)]
提供多樣的自定義文本展示
{
series: [
...,
data: [
{
value: [10, 20, 30],
label: {
// 使用格式 {樣式片段名稱| 文本內容 }
formatter: [
'標題',
'{textStyle| 文本內容 }'
].join('\n')
}
}
]
],
// 定義富文本樣式
rich:{
textStyle: {
fontFaily: 'siyuan',
fontSize: 14,
borderRadius: [4, 4, 0, 0],
align: 'center', // 定位
color: 'orange'
backgroundColor: { image: '../bg.jpg' } // 圖片背景
}
}
}
ecahrts 常用API
- init 初始化創建實例
- disponse 銷毀指定實例、或元素上掛載的實例
- use 注冊組件
- registerTheme 注冊主題
- registerMap 注冊geo或map圖表
echart實例常用API
- setOption 設置/更新圖表
- dispose 注銷實例
- clear 清空組件和圖表
- reseize 設置圖表尺寸, 不傳值時默認填充整個容器
- on 綁定事件
- off 取消事件
- dispatchAction 主動觸發事件
- showLoading 顯示加載動畫
- hideLoading 隱藏加載動畫
- group 分組