echart图表渲染合并策略

news2024/10/7 14:25:38

目录

调用方式

notMerge

普通合并

规则

例子

替换合并

规则

例子


echarts渲染函数setOption

调用方式

chart.setOption(option, {
    notMerge: boolean;
    replaceMerge?: string | string[];
    lazyUpdate: boolean;
});

notMerge

false (默认)
如果为 true,表示所有组件都会被删除
如果为 false, 有replaceMerge选项时,这类组件会进行替换合并
如果为 false, 没有replaceMerge选项时,会进行普通合并 

replaceMerge

用户可以在这里指定一个或多个组件,如:xAxisseries,这些指定的组件会进行 "replaceMerge"

普通合并

规则

特点:只会增加不会删除

注:官方文档说“id”与“name”都可以作为区分标识,但我测试的时候发现“name”不行

  1. 对 option 中每个有声明 id 的“组件描述”,寻找能匹配其 id 的已有的组件,找到的话则合并
  2. 对剩余的“组件描述”,寻找还未执行过合并的已有组件,找到的话则合并(所以大家一定要写 id)
  3. 在第二条的前提下,对还剩余的“组件描述”,创建新组件

例子

<template>
  <div>
    <div>图表</div>
    <div class="btn" @click="addBarChart">点击添加柱状图</div>
    <div class="btn" @click="addLineChart">点击添加折线图</div>
    <div class="btn" @click="coverBarChart">点击添加折线图,并覆盖柱状图</div>
    <div id="a1"></div>
  </div>
</template>

<script>
import * as echarts from "echarts";
import { onMounted } from "vue";

export default {
  name: "",
  setup() {
    let chartInstanceA = null;
    onMounted(() => {
      chartInstanceA = echarts.init(document.getElementById("a1"));
      chartInstanceA.setOption({
        xAxis: {
          data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
        },
        color: ['plum', 'yellowgreen', 'orange'],
        yAxis: {},
        legend: {
          show: true
        }
      });
    });
    function addBarChart() {
      chartInstanceA.setOption({
        series: [
          {
            id: 1,
            name: "销量1",
            type: "bar",
            data: [5, 20, 36, 10, 10, 20],
          },
        ],
      });
    }
    function addLineChart() {
      chartInstanceA.setOption({
        series: [
          {
            id: 2,
            name: "销量2",
            type: "line",
            data: [60, 49, 30, 67, 25, 10],
          },
        ],
      });
    }
    function coverBarChart(){
      chartInstanceA.setOption({
        series: [
          {
            id: 1,
            name: "销量3",
            type: "line",
            data: [5, 20, 36, 10, 10, 20],
          },
        ],
      });
    }

    return { addBarChart, addLineChart, coverBarChart };
  },
};
</script>

<style lang="less" scoped>
#a1 {
  width: 500px;
  height: 250px;
}
</style>

 初始化渲染

点击添加柱状图、点击添加折线图,并覆盖柱状图,结果显示一条折线图。这种现象是因为“销量1”与“销量3”的id一样,所以第二次的图表覆盖了第一次渲染的图表 -- 规则1

对于规则2 -- 如果“销量1”与“销量3”不写id,就符合规则2了

图1 

 点击添加柱状图、点击添加折线图,结果显示两个图表。这种现象是因为“销量1”与“销量2”的id不一样,所以两次setOption是两个不同的图表 -- 规则3

图2 

替换合并

规则

  1. 对 option 中每个有声明 id 的“组件描述”,寻找能匹配其 id 的已有的组件,找到的话则合并
  2. 删除其他没匹配到的已有组件 (被删除的地方可能会出现null)
  3. 对剩余的“组件描述”,创建新组件

例子

在上述例子上增加下列代码

<template>
  <div>
    <div class="btn" @click="mergeChart">
      点击对柱状图进行合并,对折线图进行替换(删除)
    </div>
  </div>
</template>

<script>

export default {
  name: "",
  setup() {
    let chartInstanceA = null;
    function mergeChart() {
      chartInstanceA.setOption({
        series: [
          {
            id: 1,
            name: "销量1",
            type: "bar",
            data: [5, 20, 36, 10, 50, 60],
          },
          {
            id: 4,
            name: "销量4",
            type: "line",
            data: [5, 10, 20, 25, 23, 10],
          },
        ],
      }, {replaceMerge: ['series']});
    }

    return {  mergeChart };
  },
};
</script>

在图2 例子的基础上,“点击对柱状图进行合并,对折线图进行替换(删除)”,结果柱状图数据被更新 --规则1,折线图“销量2”消失,变为新的折线图“销量4” -- 规则3

图3 

如果没有{replaceMerge: ['series'] 选项,则图上会显示三个图表

 图4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity URP】2种描边方案:模板测试和正面剔除

写在前面 风格化不像PBR&#xff0c;好像没有套路可言&#xff0c;&#xff0c;&#xff0c;简直是《怎么好看怎么来》的最大化实践了&#xff01;感觉出的PBRNPR也是为了更好地利用PBR资产才诞生的这样一个渲染方案。&#xff08;当然我的评价非常非常的片面&#xff0c;瞎说…

帆软FineReport学习篇(四)——父子格设置

帆软FineReport学习篇(四)——父子格设置 1.概念 子单元格设置父单元格后,子单元格随父单元格进行扩展 简易的说,子单元格根据父单元格分组显示2 对比示意图 2.1 左父格对比示意图 2.2 上父格对比示意图 3 制作分组报表 3.1 新建普通报表WorkBook2.cpt 3.1.1 点击文件➡点…

OldWang带你了解MySQL(六)

文章目录&#x1f525;SQL函数&#x1f525;单行函数&#x1f525;字符函数&#x1f525;数字函数&#x1f525;日期函数&#x1f525;转换函数&#x1f525;通用函数&#x1f525;SQL函数 函数介绍 函数是 SQL 的一个非常强有力的特性&#xff0c;函数能够用于下面的目的&a…

【 SpringBoot ⽇志⽂件 】

文章目录一、⽇志的作用二、认识⽇志三、⾃定义⽇志打印3.1 在程序中得到⽇志对象3.2 使⽤⽇志对象打印⽇志3.3 ⽇志格式说明四、⽇志级别4.1 ⽇志级别的作用4.2 ⽇志级别的分类与使⽤4.2.1 ⽇志级别的分类4.2.2 ⽇志使⽤4.2.2.1 配置全局日志级别4.2.2.2 配置局部文件夹的日志…

【通过Cpython3.9源码看看python的内存回收机制】

一&#xff1a;建立对象引用计数 1. 相关代码 void _Py_NewReference(PyObject *op) {if (_Py_tracemalloc_config.tracing) {_PyTraceMalloc_NewReference(op);} #ifdef Py_REF_DEBUG_Py_RefTotal; #endifPy_SET_REFCNT(op, 1); #ifdef Py_TRACE_REFS_Py_AddToAllObjects(op…

【算法】AB3DMOT之Sutherland Hodgman多边形裁剪

在AB3MOT模型中有一个步骤为计算IOU时&#xff0c;需要先计算两个立体在地面的投影2D形状&#xff0c;然后计算两个投影的重叠部分&#xff0c;实际上为多边形的裁剪算法。 AB3MOT classmethod def box2corners3d_camcoord(cls, bbox):Takes an objects 3D box with the repr…

懒人式迁移服务器深度学习环境(完全不需要重新下载)

换服务器了&#xff1f;想迁移原来服务器上的深度学习环境&#xff0c;但又觉得麻烦懒得重新安装一遍anaconda、pytorch&#xff1f;有没有办法能不费吹灰之力直接迁移&#xff1f;接下来跟着我一起&#xff0c;懒汉式迁移。   本方法适用于在同一内网下的两台服务器之间互相…

【深度强化学习】(8) iPPO 模型解析,附Pytorch完整代码

大家好&#xff0c;今天和各位分享一下多智能体深度强化学习算法 ippo&#xff0c;并基于 gym 环境完成一个小案例。完整代码可以从我的 GitHub 中获得&#xff1a;https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Model 1. 算法原理 多智能体的情形相比于单智…

SpringCloud GateWay与Nacos使用

网关就相当于一个内网与外网的出入口&#xff0c;起着 安全、验证的功能&#xff0c;如果没有网关&#xff0c;那么如果需要实现验证的功能&#xff0c;除非 SpringCloud GateWay 作为微服务的网关,起着如下作用 ① 作为所有API接口服务请求的接入点 ② 作为所有后端业务服务…

SpringBoot 整合 RabbitMQ (四十一)

二八佳人体似酥&#xff0c;腰间仗剑斩愚夫。虽然不见人头落&#xff0c;暗里教君骨髓枯。 上一章简单介绍了SpringBoot 实现 Web 版本控制 (四十),如果没有看过,请观看上一章 关于消息中间件 RabbitMQ, 可以看老蝴蝶之前的文章: https://blog.csdn.net/yjltx1234csdn/categor…

还不懂如何与AI高效交流?保姆级且全面的chatGPT提示词工程教程来啦!(一)基础篇

还不懂如何与chatGPT高效交流&#xff1f;保姆级且全面的chatGPT提示词工程教程来啦&#xff01;&#xff08;一&#xff09;基础篇 文章目录还不懂如何与chatGPT高效交流&#xff1f;保姆级且全面的chatGPT提示词工程教程来啦&#xff01;&#xff08;一&#xff09;基础篇一&…

CDH6.3.2大数据集群生产环境安装(七)之PHOENIX组件安装

添加phoenix组件 27.1. 准备安装资源包 27.2. 拷贝资源包到相应位置 拷贝PHOENIX-1.0.jar到/opt/cloudera/csd/ 拷贝PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel.sha、PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel到/opt/cloudera/parcel-repo 27.3. 进入cm页面进行分发、…

【AIGC】9、BLIP-2 | 使用 Q-Former 连接冻结的图像和语言模型 实现高效图文预训练

文章目录一、背景二、方法2.1 模型结构2.2 从 frozen image encoder 中自主学习 Vision-Language Representation2.3 使用 Frozen LLM 来自主学习 Vision-to-Language 生成2.4 Model pre-training三、效果四、局限性论文&#xff1a;BLIP-2: Bootstrapping Language-Image Pre-…

unity 序列化那些事,支持Dictionary序列化

目录 一、普通类型和UnityEngine空间类型序列化 二、数组、list的序列化 三、自定义类的序列化支持 四、自定义asset 五、在inspector面板中支持Dictionary序列化 1、在MonoBehaviour中实现Dictionary序列化 2、自定义property&#xff0c;让其在inpsector能够显示 3、Mo…

【从零开始学Skynet】实战篇《球球大作战》(七):gateway代码设计(下)

1、确认登录接口 在完成了登录流程后&#xff0c;login会通知gateway&#xff08;第⑧阶段&#xff09;&#xff0c;让它把客户端连接和新agent&#xff08;第⑨阶段&#xff09;关联起来。 sure_agent代码如下所示&#xff1a; s.resp.sure_agent function(source, fd, play…

[Gitops--1]GitOps环境准备

GitOps环境准备 1. 主机规划 序号主机名主机ip主机功能软件1dev192.168.31.1开发者 项目代码 apidemogit,golang,goland2gitlab192.168.31.14代码仓库,CI操作git-lab,git,golang,docker,gitlab-runner3harbor192.168.31.104管理和存储镜像docker,docker-compose,harbor4k8s-m…

基础排序算法【计数排序】非比较排序

基础排序算法【计数排序】非比较排序⏰【计数排序】&#x1f550;计数&#x1f566;排序&#x1f553;测试⏰总结&#xff1a;⏰【计数排序】 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用 > 基本思路&#xff1a; 1.统计数据出现的次数 2.根据统计的结…

并行分布式计算 并行算法与并行计算模型

文章目录并行分布式计算 并行算法与并行计算模型基础知识定义与描述复杂性度量同步和通讯并行计算模型PRAM 模型异步 PRAM 模型 &#xff08;APRAM&#xff09;BSP 模型LogP 模型层次存储模型分层并行计算模型并行分布式计算 并行算法与并行计算模型 基础知识 定义与描述 并…

15个最适合初创公司创始人使用的生产力工具

创业是一段激动人心且收获颇丰的旅程&#xff0c;同时也伴随着一些挑战。创始人往往要面对长时间的工作、紧迫的期限和大量的压力时刻。因此&#xff0c;初创公司创始人必须最大限度地利用他们的时间并利用他们可用的生产力工具——不仅是为了发展他们的业务&#xff0c;而且是…

Cron表达式简单介绍 + Springboot定时任务的应用

前言 表达式是一个字符串&#xff0c;主要分成6或7个域&#xff0c;但至少需要6个域组成&#xff0c;且每个域之间以空格符隔开。 以7个域组成的&#xff0c;从右往左是【年 星期 月份 日期 小时 分钟 秒钟】 秒 分 时 日 月 星期 年 以6个域组成的&#xff0c;从右往左是【星…