ECharts实现折线图颜色分段及markline标注

2024-06-14 22:08

本文主要是介绍ECharts实现折线图颜色分段及markline标注,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、预期效果

1)通过点击生成图像按钮来生成折线图
通过点击生成图像按钮来生成折线图
2)生成折线图之后可以点击调整进行折线图分段
生成折线图之后可以点击调整进行折线图分段
3)可以根据传递的参数的不同生成相应的折线图分段
有两个分离点
有多个分离点

二、技术要点

1、需要根据传参分割原有折线图的数据,用于生成不同的series子元素,便于后面的折线图分段展现。
2、折线图平行于y轴的markline实现并不友好,对于高度最高是在初次创建图标的时候就是写死的,因为目前没有找到任何方法可以获取ECharts图标自动生成的Y轴最大值。

三、代码展示

<html>
<body><div class="row"><div class="container"><div class="col-lg-4 col-md-4"><button class="btn btn-default" onclick="initCharts()">生成图像</button></div><div class="col-lg-8 col-md-8"><div id="main" style="height: 300px;"></div><button id="adjust" class="btn btn-primary pull-right" onclick="transCharts(['周三', '周五'])">调整</button></div></div></div>
</body>
<link href="css/bootstrap.css" rel="stylesheet" type="text/css" media="all" />
<script type="text/javascript" src="echarts3/echarts.js"></script>
<script type="text/javascript" src="jquery-2.1.4.min.js"></script>
<script type="text/javascript">var myChart = echarts.init(document.getElementById('main'));function initCharts() {var option = {title: {text: '未来一周气温变化',subtext: '纯属虚构'},tooltip: {trigger: 'axis'},xAxis:  {type: 'category',boundaryGap: false,data: ['周一','周二','周三','周四','周五','周六','周日']},yAxis: {type: 'value',axisLabel: {formatter: '{value} °C'},max: 15},series: [{name:'最高气温',type:'line',data:[6, 8, 11, 10, 12, 13, 10]}]};myChart.clear();myChart.setOption(option);}//根据传入的点进行数据分割, option填充和重新制图function transCharts(splitPoints) {var oldOption = myChart.getOption();var data = oldOption.series[0].data;var dataTime = oldOption.xAxis[0].data;var splitIndex = [];for (var i =0; i < splitPoints.length; i++) {splitIndex.push(dataTime.indexOf(splitPoints[i]));}console.log(splitIndex);var series = [];var index = 0;var seriesData = new Array(splitIndex.length+1);for (var i = 0; i < seriesData.length; i++) seriesData[i] = new Array();for (var i = 0; i < data.length; i++) {console.log(i + '-----------' + index);if (i < splitIndex[index]) {seriesData[index].push(data[i]);for (var j = index+1; j < seriesData.length; j++) {seriesData[j].push('-');}}else if (i == splitIndex[index]) {seriesData[index].push(data[i]);seriesData[++index].push(data[i]);for (var j = index+1; j < seriesData.length; j++) {seriesData[j].push('-');}}else {seriesData[index].push(data[i]);}for (var k = 0; k < seriesData.length; k++) {console.log(seriesData[k]);}console.log(i + '-----------');}for (var i = 0; i < seriesData.length; i++) {series.push({name: i+'',type: 'line',data: seriesData[i]});}var markLineData = [];for (var i = 0; i < splitPoints.length; i++) {markLineData.push([{coord:[splitPoints[i], 0]},{coord:[splitPoints[i], oldOption.yAxis[0].max]}])}series.push({name:'平行于y轴的趋势线',type:'line',markLine: {name:'aa',data: markLineData}})var options = {title: oldOption.title,tooltip: oldOption.tooltip,xAxis:  oldOption.xAxis,yAxis: oldOption.yAxis,series: series
//            series: [
//                {
//                    name: '最高气温',
//                    type: 'line',
//                    data: [6, 8, 11]
//                },
//                {
//                    name: '最高气温1',
//                    type: 'line',
//                    data: ['-', '-', 11, 10, 12]
//                },
//                {
//                    name: '最高气温2',
//                    type: 'line',
//                    data: ['-','-', '-', '-', 12, 13, 10]
//                },
//                {
//                    name:'平行于y轴的趋势线',
//                    type:'line',
//                    //data:[0],
//                    markLine: {
//                        name:'aa',
//                        data: [[
//                            {coord:['周三',0]},
//                            {coord:['周三',15]}//如何获取grid上侧最大值,目前是写死的
//                        ],[
//                            {coord:['周五',0]},
//                            {coord:['周五',15]}//如何获取grid上侧最大值,目前是写死的
//                        ]]
//                    }
//                }
//            ]};myChart.clear();myChart.setOption(options);}
</script>
</html>

四、代码下载

下载地址
静态版本展示

这篇关于ECharts实现折线图颜色分段及markline标注的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061632

相关文章

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.