Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 752|回复: 0

Echarts 多曲线“断点”问题解决方法

[复制链接]
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 802 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726006
    发表于 2021-6-30 13:31:00 | 显示全部楼层 |阅读模式

    Echarts 用来做可视化曲线是非常优秀的一个库。建议使用 Echarts 作为项目的可视化图标库时,仔细研究 官方实例,根据需求来选择类似的示例,下载实例模板来开发,节省时间,减少出错,提高效率。

    最近在项目中遇到了一个棘手的问题:

    1. 在图表中要显示多条曲线

    2. 每一条曲线的横坐标(时间轴)的时间点不一定相同

    对于单条曲线,时间不同的话,时间点就会比总时间点少,这时,只在对应的时间上显示点,然后连线。

    首先说明解决方法(以两条曲线为例):

    1. 获取到全部时间,作为横坐标的数据。也就是 xAxis.data 的值。如 xAxis.data = ["10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", "15:00:00"]

    2. 在各条曲线上,它们的值采用数组类型,也就是 series.data 的值。 如 series.data[0] = [['10:00:00', '120'], ['12:00:00', '132'], ['14:00:00', '101']],series.data[1] = [['11:00:00', '220'], ['13:00:00', '132'], ['15:00:00', '201']]

     

    上面例子展示了横坐标一共有六个点,第一条曲线只在第 1、3、5 个上有值,第二条曲线只在第 2、4 、6 个点上有值,这个时候需要注意一点的是,series.data 值的数组的第一个值要和 xAxis.data 数组中的值能对应上,不然不能绘制曲线

    下面详细说明:

    一、该项目用到的框架是 Angular ,在 Angular 中使用 Echarts ,首先要先引入 Echarts 库

    1. 在静态资源文件 assets 中新建一个脚本文件夹 scripts 里面存放 echarts.min.js

    2. 在 Angular CLI 配置文件 .angular-cli.json 中 ["apps"]["scripts"] 中引入这个脚本

    二、在需要使用的组件中先声明 echarts

    declare const echarts: any;

    三、绘制曲线(参考示例:Echarts 堆叠线

    /*绘制曲线*/
    curvePlotting() {
        let detectRecordCurveContainer = document.getElementById("detectRecordCurveContainer"); // 获取到绘制曲线的容器
        let myChart = echarts.init(detectRecordCurveContainer);  // 初始化
    
        const DetectRecordCurveInfo = {
          title: {
            text: this.getTitleTextData(),  // 选择的项目名称,该图表的标题
            textStyle: {
              color: '#333',
              fontWeight: 'normal',
              fontSize: 18
            },
            left: 'center'
          },
          tooltip: {
            trigger: 'axis'
          },
          legend: {
            type: 'scroll', // 当检测属性过多时,水平滚动
            bottom: 0,
            data: this.getLegendData()   // 各条曲线的名称,数组类型
          },
          grid: {
            left: 60,  // 比css中padding-left多40px
            right: 60, // 比css中padding-right多40px
            bottom: 40,
            containLabel: true
          },
          toolbox: {
            right: 30,  // 设置'保存图片'文本的位置
            feature: {
              saveAsImage: {}
            }
          },
          xAxis: {
            type: 'category',
            boundaryGap: false,
            data: this.getTimeData()   // 横坐标,时间
          },
          yAxis: {
            type: 'value'
          },
          series: this.getSeries()  // 曲线的点
        };
        if (DetectRecordCurveInfo && typeof DetectRecordCurveInfo === "object") {  // 如果获取到了数据且数据是对象,DetectRecordCurveInfo 是父组件传来的可用的数据信息
          myChart.setOption(DetectRecordCurveInfo, true);
        }
      }

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-11-14 15:21 , Processed in 0.402461 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表