文章目录
-
- web初始化
- 小程序初始化
- 图表大小
-
- 1、直接在 dom 上设置
- 2、在 js 中设置
- 3、响应式大小
- 销毁
- 坐标轴
- 图例
- 事件
-
- 鼠标事件
- 交互事件
- 代码触发 ECharts 中组件的行为
- 监听“空白处”的事件
- 渲染器canvas vs svg
- 网格 grid
- 区域缩放滑动等 dataZoom
- 提示框组件 tooltip
- 坐标轴指示器 axisPointer
- 工具栏 toolbox
- 图形元素组件 graphic
- 数据集 dataset
- 系列 series【核心配置】
web初始化
<div id="main" style="width: 600px;height:400px;"></div>
import * as echarts from 'echarts';
var chartDom = document.getElementById('main');
var myChart = echarts.init(chartDom);
var option;
option = {
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
series: [
{
data: [120, 300, 150, 80, 70, 110, 130],
type: 'bar',
itemStyle: {
color: '#60D87E',
barBorderRadius: [15, 15, 0, 0]
},
label: {
show: true, // 显示标签
position: 'top', // 标签位置,可以设置为 'inside'、'top'、'bottom' 等
// position: 'insideTop',
// offset: [0, 5], // 调整 offset 数值来控制标签的位置
textStyle: {
color: '#A9A9A9' // 设置文字颜色为白色
}
},
// 设置柱子的默认宽度
// barWidth: 20,
// 设置柱子的最大宽度
barMaxWidth: 30
}
]
};
option && myChart.setOption(option);
小程序初始化
https://github.com/ecomfe/echarts-for-weixin
官方推荐的接入方法:
<view class="container">
<ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
</view>
function initChart(canvas, width, height, dpr) {
const chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr // 像素比
});
canvas.setChart(chart);
var option = {
...
};
chart.setOption(option);
return chart;
}
Page({
data: {
ec: {
onInit: initChart
}
}
});
需要调用接口时候的接入方法:
<ec-canvas id="wx-chart" canvas-id="wx-chart" ec="{{ec}}"/>
{
"usingComponents": {
"ec-canvas": "../ec-canvas/ec-canvas"
}
}
const echarts = require('../ec-canvas/echarts');
initChart() {
const self = this;
let mousedownX = 0;
echartsComponnet = this.selectComponent('#wx-chart');
echartsComponnet.init((canvas: any, width: any, height: any, dpr: any) => {
// 初始化图表
const chart = echarts.init(canvas, undefined, {
width,
height,
devicePixelRatio: dpr,
});
chart.setOption(self.getOptions());
// 需要监听事件的话在这里
chart.getZr().on('mousedown', (params: any) => {
console.log('测试-mousedown');
mousedownX = params.offsetX;
});
chart.getZr().on('mouseup', (params: any) => {
if (self.data.chartType !== 2) {
if (mousedownX - params.offsetX > 50) {
console.log('测试-左滑动');
this.triggerEvent('changChartData', { type: 'next' });
}
if (params.offsetX - mousedownX > 50) {
console.log('测试-右滑动');
this.triggerEvent('changChartData', { type: 'last' });
}
}
});
return chart;
});
}
图表大小
1、直接在 dom 上设置
<div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">
var myChart = echarts.init(document.getElementById('main'));
</script>
2、在 js 中设置
<div id="main"></div>
<script type="text/javascript">
var myChart = echarts.init(document.getElementById('main'), null, {
width: 600,
height: 400
});
</script>
3、响应式大小
<style>
#main,
html,
body {
width: 100%;
}
#main {
height: 400px;
}
</style>
<div id="main"></div>
<script type="text/javascript">
var myChart = echarts.init(document.getElementById('main'));
window.addEventListener('resize', function() {
myChart.resize();
});
</script>
销毁
当图表容器被销毁之后,调用
坐标轴

option = {
xAxis: {
// ...
},
yAxis: {
// ...
}
};
关于轴线、刻度、刻度标签等等都是在这两个对象里面设置的。
图例

option = {
legend: {
// Try 'horizontal'
orient: 'vertical',
right: 10,
top: 'center'
}
};
一般在 legend 对象里面设置
事件
更详细的可以看官网
在 ECharts 中事件分为两种类型:
- 一种是用户鼠标操作点击,或者 hover 图表的图形时触发的事件。
- 还有一种是用户在使用可以交互的组件后触发的行为事件,例如在切换图例开关时触发的 ‘legendselectchanged’ 事件,数据区域缩放时触发的 ‘datazoom’ 事件等等。
鼠标事件
举例
// 基于准备好的dom,初始化ECharts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
var option = {
xAxis: {
data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
},
yAxis: {},
series: [
{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
// 处理点击事件并且跳转到相应的百度搜索页面
myChart.on('click', function(params) {
window.open('https://www.baidu.com/s?wd=' + encodeURIComponent(params.name));
});
具体点击到图表的哪里(比如柱状图的柱子、第几个柱子等等),会在 click 事件的回调函数的参数(params)中可以进行判断。
交互事件
监听一个图例开关的示例
// 图例开关的行为只会触发 legendselectchanged 事件
myChart.on('legendselectchanged', function(params) {
// 获取点击图例的选中状态
var isSelected = params.selected[params.name];
// 在控制台中打印
console.log((isSelected ? '选中了' : '取消选中了') + '图例' + params.name);
// 打印所有图例的状态
console.log(params.selected);
});
代码触发 ECharts 中组件的行为
上面提到诸如 ‘legendselectchanged’ 事件会由组件交互的行为触发,那除了用户的交互操作,有时候也会有需要在程序里调用方法触发图表的行为,使用
比如有需求要每隔 1s 高亮一个饼状图的某一个块,循环
let currentIndex = -1;
setInterval(function() {
var dataLen = option.series[0].data.length;
// 取消之前高亮的图形
myChart.dispatchAction({
type: 'downplay',
seriesIndex: 0,
dataIndex: currentIndex
});
currentIndex = (currentIndex + 1) % dataLen;
// 高亮当前图形
myChart.dispatchAction({
type: 'highlight',
seriesIndex: 0,
dataIndex: currentIndex
});
// 显示 tooltip
myChart.dispatchAction({
type: 'showTip',
seriesIndex: 0,
dataIndex: currentIndex
});
}, 1000);
监听“空白处”的事件
zrender 事件和 echarts 事件。
前者是当鼠标在任何地方都会被触发,而后者是只有当鼠标在图形元素上时才能被触发。
myChart.getZr().on('click', function(event) {
// 该监听器正在监听一个`zrender 事件`。
});
myChart.on('click', function(event) {
// 该监听器正在监听一个`echarts 事件`。
});
举例:监测用户在图表上左右滑动
var mousedownX = 0; // 记录鼠标按下时的横坐标
// 假设你的图表实例是 myChart
myChart.getZr().on('mousedown', function(params) {
mousedownX = params.offsetX;
});
myChart.getZr().on('mouseup', function(params) {
var offsetX = params.offsetX;
var threshold = 50; // 设置阈值,表示滑动的距离超过多少时触发事件
if (mousedownX - offsetX > threshold) {
// 向左滑动,触发事件
console.log('左滑动');
// 这里可以添加触发事件的逻辑,比如加载新的7条数据等
} else if (offsetX - mousedownX > threshold) {
// 向右滑动,触发事件
console.log('右滑动');
// 这里可以添加触发事件的逻辑,比如加载上一组7条数据等
}
});
渲染器canvas vs svg
浏览器端图表库大多会选择 SVG 或者 Canvas 进行渲染。对于绘制图表来说,这两种技术往往是可替换的,效果相近。但是在一些场景中,他们的表现和能力又有一定差异。于是,对它们的选择取舍,就成为了一个一直存在的不易有标准答案的话题。
ECharts 从初始一直使用 Canvas 绘制图表。而 ECharts v4.0 发布了 SVG 渲染器,从而提供了一种新的选择。在初始化图表实例时,只需设置 renderer 参数 为 ‘canvas’ 或 ‘svg’ 即可指定渲染器,比较方便。
这里介绍一下
(dom?: HTMLDivElement|HTMLCanvasElement, theme?: Object|string, opts?: {
devicePixelRatio?: number,
renderer?: string,
useDirtyRect?: boolean, // 从 `5.0.0` 开始支持
useCoarsePointer?: boolean, // 从 `5.4.0` 开始支持
pointerSize?: number, // 从 `5.4.0` 开始支持
ssr?: boolean, // 从 `5.3.0` 开始支持
width?: number|string,
height?: number|string,
locale?: string // 从 `5.0.0` 开始支持
}) => ECharts
renderer: 渲染模式,支持 ‘canvas’ 或者 ‘svg’。
网格 grid

区域缩放滑动等 dataZoom
有三种:
- 内置型数据区域缩放组件(dataZoomInside):内置于坐标系中,使用户可以在坐标系上通过鼠标拖拽、鼠标滚轮、手指滑动(触屏上)来缩放或漫游坐标系。
- 滑动条型数据区域缩放组件(dataZoomSlider):有单独的滑动条,用户在滑动条上进行缩放或漫游。
- 框选型数据区域缩放组件(dataZoomSelect):提供一个选框进行数据区域缩放。即 toolbox.feature.dataZoom,配置项在 toolbox 中。
提示框组件 tooltip
鼠标划入或者点击的时候触发的数据提示框

坐标轴指示器 axisPointer
就是这个十字线跟随鼠标移动

工具栏 toolbox
内置有导出图片,数据视图,动态类型切换,数据区域缩放,重置五个工具。

图形元素组件 graphic
可以支持的图形元素包括:
image, text, circle, sector, ring, polygon, polyline, rect, line, bezierCurve, arc, group,
可以给图表增加一些自定义的背景,如水印。

还可以增加自定义文本,比如无数据的时候展示暂无数据。

数据集 dataset
ECharts 4 开始支持了 数据集(dataset)组件用于单独的数据集声明。
其实就是代替了之前在 series 中的 data。
系列 series【核心配置】
系列列表。每个系列通过 type 决定自己的图表类型
比如折线图、柱状图、饼图等等