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 图例组件的更多相关文章

  1. 转:ECharts图表组件入门教程之Theme:ECharts图表的皮肤是什么?如何给图表换主题(皮肤)Theme?

    一.什么是ECharts图表的皮肤(主题)? 针对这个问题我只能这样回答,ECharts图表的主题(皮肤)就犹如人的衣服一样,是用来衬托和渲染主体,使其变得更加美观好看的目的.你去过ECharts图表 ...

  2. vue-cli ——解决多次复用含有Echarts图表组件的问题

    在vue项目里,组件复用是一件很开心的事,可以节省很多时间去排版,达到事半功倍效果,但是昨晚在vue-cli项目里组件复用时发现基于Echarts图表的组件不能够复用,昨晚捯饬了很久,终于还是解决了这 ...

  3. 转:ECharts图表组件之简单关系图:如何轻松实现另类站点地图且扩展节点属性实现点击节点页面跳转

    站点地图不外乎就是罗列一个网站的层次结构,提炼地讲就是一个关系结构图.那么我们如何巧用ECharts图表组件内的简单关系结构图来实现一个站点的地图结构呢?另外如何点击某个节点的时候实现页面跳转呢? 针 ...

  4. vue echarts vue-echarts组件使用

    1.git地址 https://github.com/ecomfe/vue-echarts 2.使用 (1)安装 npm install vue-echarts --save-dev (2)引入 im ...

  5. ECharts grid组件离容器的距离

    ECharts grid组件离容器的距离 由 Carrie 创建, 最后一次修改 2017-09-04 grid.left   |   string, number [ default: '10%' ...

  6. 在Vue中echarts可视化组件的使用

    echarts组件官网地址:https://echarts.apache.org/examples/zh/index.html 1.找到脚手架项目所在地址,执行cnpm install echarts ...

  7. echarts之简单的入门——【二】再增加一个柱状图和图例组件

    echarts之简单的入门——[一]做个带时间轴的柱状统计图 现在需求说,我需要知道日答题总次数和活跃人数,那么我们如何在上面的图表中增加一个柱状图呢? 如果你看过简单入门中的配置项手册中series ...

  8. ECharts公共组件:title详解、 tooltip详解、toolbox详解、legend详解、dataZoom详解、visualMap全解

    1. Title mytextStyle={ color:"#333",                           //文字颜色 fontStyle:"norm ...

  9. vue2.0 自定义 饼状图 (Echarts)组件

    1.自定义  图表  组件 Echarts.vue <!-- 自定义 echart 组件 --> <template> <div> <!-- echart表格 ...

  10. 【小程序】---- 封装Echarts公共组件,遍历图表实现多个饼图

    一.问题描述: 在小程序的项目中,封装公共的饼图组件,并在需要的页面引入使用.要求一个页面中有多个饼图,动态渲染不同的数据. 二.效果实现: 1. 查看——小程序使用Echarts的方式 2. 封装饼 ...

随机推荐

  1. docker 修改容器内容后更新镜像的流程

    在 Docker 中,如果你修改了一个容器的内容并希望将这些更改保存为一个新的镜像,可以按照以下步骤进行: docker version: 26.1 1. 确保容器运行 首先,确保你正在修改的容器是运 ...

  2. Figma 学习笔记 – Prototype

    挺简单的, 只要知道它有什么, 基本上就会用了 监听 Event Type 监听 Callback Action 过度 Animation Frame Scrolling

  3. QT6框架也能开发Web浏览器应用程序:QT6框架如何编译运行测试WebAssembly应用程序?

    QT6框架也能开发Web浏览器应用程序:QT6框架如何编译运行测试WebAssembly应用程序? 简介 本文将介绍如何使用QT6框架开发Web浏览器应用程序,并介绍具体的编译运行测试WebAssem ...

  4. T2回家(home)题解

    T2回家(home) 现在啥也不是了,虽然会了逆元,但是对期望概率题还是一窍不通,赛时相当于只推出了 \(n=1\) 的情况,结果运用到所有情况,理所应当只有20分. 题目描述 小Z是个路痴.有一天小 ...

  5. 【Simpleperf】Android的CPU分析,性能优化利器

    很多时候,写代码是一件很爽的事情,但最后需要对APP进行瘦身.性能分析却是一件很棘手的事情.当需要对APP的性能进行分析时,Simpleperf是一个简单快捷的选择. 正文开始前,先奉上官方的资料: ...

  6. Ewald求和在分子静电势能计算中的应用

    技术背景 分子动力学模拟中,计算周期性边界条件的静电势常被视作计算的瓶颈之一.形式上是比较容易的,例如不考虑周期性边界条件的话,静电势能就是: \[E=\frac{1}{4\pi\epsilon_0} ...

  7. 小程序的button组件

    button组件 按钮组件 功能比html的button按钮丰富 可以通过open-type属性可以调用微信提供的各种功能(客服,转发,获取用户权限,获取用户信息等): 按钮的属性 size 按钮的大 ...

  8. 双通道MIL-STD-1553B总线通讯模块

    * 双通道MIL-STD-1553B总线通讯模块 * 32bi,33 MHz  CPCI/PCI/总线* 每个通道为A.B双冗余总线* 单功能可设置BC/RT/BM一种工作模式* 数据传输率: 4Mb ...

  9. vue3+tpyeScript + element plus 三级复选框,全选控制全部,左侧选中控制右侧全选

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  10. 云原生爱好者周刊:STUNner 助你在 K8s 集群中使用 WebRTC 服务

    开源项目推荐 STUNner 目前大多数内网穿透服务都依赖于 STUN 服务或者 TURN 服务,但这些服务大多数都是公用的,即使是私有化部署,也没法迁移到 Kubernetes 的环境中,因为 Ku ...