Echarts 图例组件
1.图例组件的基本介绍
图例组件legend展现了不同系列的标记(symbol),颜色和名字。可以通过点击图例控制哪些系列不显示。

2.开启图例组件
- 开启图例组件默认时关闭状态,通过配置legend字段后开启此功能
var option = {
legend: {
},
}
3.图例的位置
- 通过配置下面字段,可以控制图例组件的位置
| 属性 | 说明 |
|---|---|
| left | 图例组件离容器左侧的距离 |
| top | 图例组件离容器上侧的距离 |
| right | 图例组件离容器右侧的距离 |
| bottom | 图例组件离容器下侧的距离 |
legend:{
data:['视频广告1','联盟广告1','邮件营销1'],
left: '80%',
top: '30%',
}

3.图例组件的数据
- 开启图例组件的前提的是series中的数据项必须有name属性:图例组件通过series中数据项的name属性进行关联,如果数据项没有name属性,那么将无法通过图例组件控制这个数据项的展示与隐藏
- 图例组件的按钮数量与legend.data字段的值(数组长度)相关,data中有多少个数据,就生成多少个按钮(可以以此来精确控制展示那个按钮,但是没什么意义,因为其对应的图表项还是会展示)
- legend.data字段的值默认为series中的数据项中name属性的集合,以下写法是等价的
legend: {
},
series: [{
name: '1#冲床 80吨',
data: [820, 932, 901, 934, 1290, 1330],
type: 'bar'
},
{
name: '1#注塑机',
data: [600, 652, 571, 654, 990, 1530],
type: 'bar'
}]
legend: {
data: ['1#冲床 80吨', '1#注塑机']
},
series: [{
name: '1#冲床 80吨',
data: [820, 932, 901, 934, 1290, 1330],
type: 'bar'
},
{
name: '1#注塑机',
data: [600, 652, 571, 654, 990, 1530],
type: 'bar'
}]

4.图例组件的样式
- 样式非两种,正常展示时的样式和关闭时的样式
legend: {
textStyle:{
color: "rgba(255,255,255,0.8)"
},//正常状态的文本样式
itemStyle:{
},//正常状态的按钮样式
inactiveColor:"rgba(255,255,255,0.3)",//图例关闭时的颜色
},
5.单独配置某个图例项
- legend.data数组的元素的值默认情况是字符串,如果需要可以将其扩展成一个对象,依次拓展出更多的配置功能,例如图标种类,文本样式
legend: {
data: [
{
name: '1#冲床 80吨',//对应series中的name
// 强制设置图形为圆。
icon: 'circle',
// 设置文本为红色
textStyle: {
color: 'red'
},
itemStyle:{},//按钮样式
},{
name: '1#注塑机',//对应series中的name
// 强制设置图形为方。
icon: 'rect',
// 设置文本为蓝色
textStyle: {
color: 'blue'
}
}
]
},

6.多坐标系
- 一般情况下legend字段的值是一个对象,表示当前只有一个图例组件
- 如果当前图表有多个坐标系,或者有多个饼图这种,此时需要将legend配置成一个数组,每个数组元素对应一个坐标系或者饼图
legend: [
{
icon: 'circle',
left: '65%',
top: '25%',
data: ['A','B'],
},
{
icon: 'circle',
left: '25%',
top: '70%',
data: ['C','D']
}
],
series:[
{
type:"pie"
data:[{name:A,value:1},{name:B,value:2}]
},
{
type:"pie"
data:[{name:C,value:1},{name:D,value:2}]
}
]
7.配置图例以及相关数据的展示状态
- 默认情况下,会显示所有的图例,如果想隐藏某些系列的数据,可以使用selected字段进行配置
legend: {
data: ['1#冲床80吨', '1#注塑机'],
selected: {
'1#冲床80吨': true,
'1#注塑机': false
}
}

8.图例过多,分页展示
- 将type属性设置为scroll即可,滚动方向由orient属性设置
legend:{
type: 'scroll',
orient: 'vertical',//horizontal水平滚动 vertical垂直滚动
right: 20,
top: 20,
bottom: 20,
selected: selectedData
},

9.legend组件的高度
- 分页展示图例时,要么横向滚动(单行),要么垂直滚动(单列),如果想要多行自适应高度,需要在渲染前获取其所需的高度,并渲染到echarts容器中
- 在此逻辑下,echarts容器的高度分为3个部分:网格区域(网格区域的位移需要动态设定),x轴文本区域(可能有旋转,高度大概60),legend高度,其中网格高度和x轴文本高度是固定的
- 此需求下echarts容器的高度是动态的,如果是第一次渲染,则等待echarts容器高度渲染完成后再进行初始化,如果是第二次渲染,则调用resize()方法自适应新的高度
调用顺序
//1.要渲染的数据进行格式转换
//2.计算legend高度,并将新高度渲染到echarts容器中
//3.等到新高度渲染完毕,准备option进行渲染
//初始化echart
if(!this.echarts_instance){
this.echarts_instance = echarts.init(document.querySelector('#echarts'))
}else{
//刷新高度
this.echarts_instance.resize()
}
var option = {}
this.echarts_instance.setOption(option)
代码
//模拟legend高度
getLegendHeight(name_list,config = {}){
//参数初始化
var width = config.width? config.width : document.body.clientWidth
var itemGap = config.itemGap? config.itemGap : 10
var itemWidth = config.itemWidth? config.itemWidth : 25
var itemHeight = config.itemHeight? config.itemHeight : 14
var padding = config.padding? config.padding : 5
var fontSize = config.fontSize? config.fontSize : 12
//创建元素 装载所有图例的容器
var legend_box = document.createElement('div')
//设定容器宽度(echarts容器的宽度)
legend_box.style.width = width + 'px'
//遍历图例名称,模拟生成图例元素
name_list.forEach(name=>{
//图例项容器
var legend_item = document.createElement('div')
legend_item.style.display = 'inline-block'
legend_item.style['margin-right'] = itemGap + 'px'
//图标元素
var icon_item = document.createElement('span')
icon_item.style.display = 'inline-block'
icon_item.style.width = (itemWidth + padding*2) + 'px'
icon_item.style.height = (itemHeight + padding*2) + 'px'
//名称容器
var name_item = document.createElement('span')
name_item.innerHTML = name
name_item.style.fontSize = fontSize + 'px'
//添加到图例容器中
legend_box.appendChild(icon_item)
legend_box.appendChild(name_item)
})
//插入到页面中
document.body.appendChild(legend_box)
//保存高度
var legend_height = legend_box.clientHeight
//从页面中移除
document.body.removeChild(legend_box)
//返回数据
return legend_height
}
Echarts 图例组件的更多相关文章
- 转:ECharts图表组件入门教程之Theme:ECharts图表的皮肤是什么?如何给图表换主题(皮肤)Theme?
一.什么是ECharts图表的皮肤(主题)? 针对这个问题我只能这样回答,ECharts图表的主题(皮肤)就犹如人的衣服一样,是用来衬托和渲染主体,使其变得更加美观好看的目的.你去过ECharts图表 ...
- vue-cli ——解决多次复用含有Echarts图表组件的问题
在vue项目里,组件复用是一件很开心的事,可以节省很多时间去排版,达到事半功倍效果,但是昨晚在vue-cli项目里组件复用时发现基于Echarts图表的组件不能够复用,昨晚捯饬了很久,终于还是解决了这 ...
- 转:ECharts图表组件之简单关系图:如何轻松实现另类站点地图且扩展节点属性实现点击节点页面跳转
站点地图不外乎就是罗列一个网站的层次结构,提炼地讲就是一个关系结构图.那么我们如何巧用ECharts图表组件内的简单关系结构图来实现一个站点的地图结构呢?另外如何点击某个节点的时候实现页面跳转呢? 针 ...
- vue echarts vue-echarts组件使用
1.git地址 https://github.com/ecomfe/vue-echarts 2.使用 (1)安装 npm install vue-echarts --save-dev (2)引入 im ...
- ECharts grid组件离容器的距离
ECharts grid组件离容器的距离 由 Carrie 创建, 最后一次修改 2017-09-04 grid.left | string, number [ default: '10%' ...
- 在Vue中echarts可视化组件的使用
echarts组件官网地址:https://echarts.apache.org/examples/zh/index.html 1.找到脚手架项目所在地址,执行cnpm install echarts ...
- echarts之简单的入门——【二】再增加一个柱状图和图例组件
echarts之简单的入门——[一]做个带时间轴的柱状统计图 现在需求说,我需要知道日答题总次数和活跃人数,那么我们如何在上面的图表中增加一个柱状图呢? 如果你看过简单入门中的配置项手册中series ...
- ECharts公共组件:title详解、 tooltip详解、toolbox详解、legend详解、dataZoom详解、visualMap全解
1. Title mytextStyle={ color:"#333", //文字颜色 fontStyle:"norm ...
- vue2.0 自定义 饼状图 (Echarts)组件
1.自定义 图表 组件 Echarts.vue <!-- 自定义 echart 组件 --> <template> <div> <!-- echart表格 ...
- 【小程序】---- 封装Echarts公共组件,遍历图表实现多个饼图
一.问题描述: 在小程序的项目中,封装公共的饼图组件,并在需要的页面引入使用.要求一个页面中有多个饼图,动态渲染不同的数据. 二.效果实现: 1. 查看——小程序使用Echarts的方式 2. 封装饼 ...
随机推荐
- 工具 – Vite
前言 一直想 try Vite, 但一直没有机会. 今天突然 Live Server IP Address 手机连不上...也不知道是 Bug 还是怎么回事儿. 总之 IIS IP Address 没 ...
- JavaScript – 数据类型
前言 写着 TypeScript 学习笔记, 顺便也写点 JS 的呗. 参考 JS数据类型分类和判断 阮一峰 – 数据类型 JS 数据类型 string number boolan undefined ...
- Linux调度器:进程优先级
一.前言 本文主要描述的是进程优先级这个概念.从用户空间来看,进程优先级就是nice value和scheduling priority,对应到内核,有静态优先级.realtime优先级.归一化优先级 ...
- Java日期时间API系列15-----Jdk8中java.time包中的新的日期时间API类,java日期计算2,年月日时分秒的加减等
通过Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析 ,可以看出java8设计非常好,实现接口Temporal, Tempora ...
- C# efcode 新建表格数据 增删改查
using TestDbContext ctx = new TestDbContext(); var b1 = new Book { AuthorName = "杨中科", Tit ...
- Android复习(二)应用资源——>字符串
转自:https://developer.android.google.cn/guide/topics/resources/string-resource#kotlin 字符串资源为您的应用提供具有可 ...
- python 打包 py 文件 为exe
使用 pyinstaller 来进行打包 pip install pyinstaller 可能需要全局 科学 代理上网 或者 修改 下载源地址 执行命令 图标path:C:\desktop\icon ...
- DNShell
DNShell 一款基于DNS C2隧道的反弹shell工具. 支持 功能: 支持DNS-recordA-直连型 的C2隧道. 目标: Windows下基于Powershell的反弹. Linux下基 ...
- Codeforces 做题记录 2023-10-22
远古做题记录.大概是 22 年写的. CF1858E1 Rollbacks (Easy Version) Description 给定一个初始为空的数列 \(a\),你需要处理以下操作: + x 将数 ...
- 云原生的 WebAssembly 能取代 Docker 吗?
WebAssembly 是一个可移植.体积小.加载快并且兼容 Web 的全新格式.由于 WebAssembly 具有很高的安全性,可移植性,效率和轻量级功能,因此它是应用程序安全沙箱方案的理想选择.现 ...