百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

一起读 ECharts 配置项手册之 series「i」-line(上)

bigegpt 2024-10-20 04:24 2 浏览


之前的文章写得都比较杂,还总是想不到要写点什么……

所以最近打算把 ECharts 所有系列挨个聊一遍,写一个 series 系列的简单介绍,解决一大段时间的难选题问题- -b,顺便方便比我还新的新手入门。

正文

  • ?series[i]-line.type
  • series[i]-line 也就是折线图/面积图,要使用折线图/面积图时,首先需要使用 series[i]-line 的第一个配置「type」,将其设置为字符串值 'line'。

    • series[i]-line.id

    「id」这个配置无默认值,但实测最新的 ECharts 4.2.1 是有默认值的,规则如下(「seriesId」即「id」,「seriesIndex」即 series[i] 的 i,「seriesName」是后面的「series[i]-line.name」)

    seriesId = 'series' + seriesIndex + '0';
    
    seriesName = 'series' + seriesIndex

    「id」可传入字符串值作为当前 series[i] 的 ID,用途如官方所说,「可用于在 option 或者 API 中引用组件」。


    举个栗子,这样的配置项,series 中有多个 series[i]

    option = {
      ...,
      series: [
        {
          id: 'series1',
          ...
        }, {
          id: 'series2',
          ...
        }, {
          id: 'series3',
          ...
        },
      ]
    }

    我们想更新 series2 的数据,可以这么写,setOption 会自动匹配。

    myChart.setOption({
      series: [{
        id: 'series2',
        data: [1, 2, 3, 4, 5]
      }]
    })


  • series[i]-line.name
  • 「name」系列名称,可用于

    1. tooltip.formatter 的模版变量 {a}
    2. legend.data 的图例筛选[ seriesName1, seriesName2, ...]
    3. setOption 更新数据和配置项时用于指定对应的系列(与前面的「id」作用类似)


    • series[i]-line.coordinateSystem

    「coordinateSystem」,用于指定该系列使用的坐标系

    1. 默认值为 'cartesian2d',使用二维的直角坐标系(也称笛卡尔坐标系),通过 xAxisIndex, yAxisIndex 指定相应的坐标轴组件。
    2. 也可以设置为 'polar',使用极坐标系,通过 polarIndex 指定相应的极坐标组件


    • series[i]-line.xAxisIndex 和 series[i]-line.yAxisIndex

    默认值为 0,使用的 x/y 轴的 index(xAxis[i] / yAxis[i]),在单个图表实例中存在多个 x/y 轴的时候有用。

    • series[i]-line.polarIndex

    与上条类似,默认值为 0,使用的极坐标系的 index(polar[i]),在单个图表实例中存在多个极坐标系的时候有用。


    • series[i]-line.symbol

    标记的图形,可传入字符串值或函数。默认值为 'emptyCircle'。

    1. 还可以设置为'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none' ;
    2. 通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI;
    3. 通过 'path://' 将图标设置为任意的矢量路径,支持任意比例。SVG PathData 可以去阿里巴巴矢量图标库 Iconfont 网站下载,也可以从 Adobe Illustrator 等工具编辑导出。
    4. 如果需要每个数据的图形不一样,可以设置为如下格式的回调函数:(value: Array|number, params: Object) => string
      1. 其中第一个参数 value 为 data 中的数据值。
      2. 第二个参数params 是其它的数据项参数。
      3. 经验证这个回调函数在 4.2.1 里还未支持,在 4.3.0-rc.2(Pre-release) 里已提供。


  • series[i]-line.symbolSize
  • 标记的大小,可传入数值、数组或函数,默认值为 4(宽和高均为 4),也可以分别设置宽高,如 [20, 10] 表示标记宽为 20,高为 10。

    同样支持回调函数:

    (value: Array|number, params: Object) => number|Array

    1. 其中第一个参数 value 为 data 中的数据值
    2. 第二个参数params 是其它的数据项参数。


    • series[i]-line.symbolRotate

    标记的旋转角度,可传入数值,如 90(代表逆时针旋转 90 度)。


    • series[i]-line.symbolKeepAspect

    如果 symbol 是 path:// 的形式,是否在缩放时保持该图形的长宽比,可传入布尔值,默认为 false。


    • series[i]-line.symbolOffset

    标记相对于原本位置的偏移,可传入数组,默认值为 [0, 0] ,数组元素既可以是数值,也可以是百分比(以元素尺寸,即宽或者高作为 100%)。数组第一个值代表向右的偏移量,第二个值代表向下的偏移量。


    • series[i]-line.showSymbol

    是否显示 symbol, 可传入布尔值,默认为 true。如果 false 则只有在 tooltip hover 的时候显示。


    • series[i]-line.showAllSymbol

    是否显示所有 symbol 图形,可传入布尔值,只在主轴为类目轴(axis.type 为 'category')时有效,可选值如下:

    1. 默认值 'auto',如果有足够空间则显示所有 symbol 图形,否则随主轴标签间隔隐藏策略;
    2. true,显示所有 symbol 图形;
    3. 随主轴标签间隔隐藏策略,效果如下图。


    • series[i]-line.hoverAnimation

    是否开启 hover 在拐点标志上的提示动画效果(强调/高亮),可传入布尔值,默认为 true。比如鼠标浮在该 symbol 上、浮在 series 对应图例(legend)上、浮在该 symbol 所在轴(tootip.trigger 为 'axis')等。

    • series[i]-line.legendHoverLink

    是否启用图例 hover 时的联动高亮,即鼠标浮在图例(legend)上的时候,该图例对应的 series 的 symbol 是否高亮(放大)可传入布尔值,默认为 true。


    • series[i]-line.stack

    数据堆叠,同个类目轴上系列配置相同的stack值后,后一个系列的值会在前一个系列的值上相加(堆叠柱图也是用这个属性实现)。相同数据是否堆叠的对比,如效果官方例子所示:


    • series[i]-line.cursor

    鼠标浮在该系列的 symbol 上时,鼠标光标的样式,同 CSS 的 cursor,可传入字符串值,默认为一只手 'pointer' ,其他可用属性还有 'crosshair','move','wait' 等等。


    • series[i]-line.connectNulls

    是否连接空数据,可传入布尔值,默认值为 false。效果如下:


    • series[i]-line.clipOverflow

    是否对超出部分裁剪,可传入布尔值,默认为裁剪 true。


    • series[i]-line.step

    是否是阶梯线图,可传入布尔值或字符串值,默认为 false。可以设置为 true 显示成阶梯线图,也支持设置成 'start'(与 true 等效), 'middle', 'end' 分别配置在当前点,当前点与下个点的中间点,下个点拐弯,效果见下图(官方示例)。


    • series[i]-line.smooth

    是否曲线平滑度,可传入布尔值或 0 到 1 的数值(数值越大越平滑),默认值为 false,与传入 0 等效,即折线效果;传入 true,与传入 0.5 等效。具体效果如下图所示。


    • series[i]-line.smoothMonotone

    平滑算法,可传入字符串值,默认值手册未提及,经测试应该为 'none',即老算法;传入 'x' 则曲线在数据点处方向为水平,传入 'y' 则为竖直。具体效果如下图。


    • series[i]-line.sampling

    官方描述:折线图在数据量远大于像素点时候的降采样策略,开启后可以有效的优化图表的绘制效率,默认关闭,也就是全部绘制不过滤数据点。

    1. 'average' 取过滤点的平均值
    2. 'max' 取过滤点的最大值
    3. 'min' 取过滤点的最小值
    4. 'sum' 取过滤点的和

    具体效果如下图:


    • series[i]-line.zlevel

    折线图所有图形的 zlevel 值,可传入数值,默认值为 0。

    主要用于 Canvas 分层,将变化较多和较少的组件通过分层隔离开,但要注意分层过多会加大内存开销,需要用手机浏览时谨慎使用。


    • series[i]-line.z

    官方描述:折线图组件的所有图形的z值。控制图形的前后顺序。z 值小的图形会被 z 值大的图形覆盖。z 相比 zlevel 优先级更低,而且不会创建新的 Canvas。

    可传入数值,默认值为 2。


    • series[i]-line.silent

    官方描述:图形是否不响应和触发鼠标事件,默认为 false,即响应和触发鼠标事件。

    可传入布尔值。

    series[i]-line.animation

    是否开启动画,可传入布尔值,默认为 true。


    series[i]-line.animationThreshold

    关闭动画的阈值,当单个 series 显示的图形数量大于阈值时会关闭动画。

    可传入数值,默认 2000.


  • series[i]-line.animationDuration
  • 初始动画持续的时长,symbol 渲染动画的快慢,可传入数值,默认值 1000(毫秒),也可通过回调函数为每个数据定义不同的时长。

    animationDuration: function (idx) {
        // 越往后的数据动画时长越长
        return idx * 100;
    }
  • series[i]-line.animationDurationUpdate
  • 更新动画持续的时长, symbol 渲染动画的快慢,可传入数值,默认值 1000(毫秒),也可通过回调函数为每个数据定义不同的时长。


    • series[i]-line.animationDelay

    初始动画的延迟时间,symbol 渲染动画的早晚,可传入数值,默认值 0(毫秒),也可通过回调函数为每个数据定义不同的时长。

    animationDelay: function (idx) {
        // 越往后的数据延迟越长
        return idx * 100;
    }
  • series[i]-line.animationDelayUpdate
  • 更新动画的延迟时间,symbol 渲染动画的早晚,可传入数值,默认值 0(毫秒),也可通过回调函数为每个数据定义不同的时长。


    series[i]-line.animationEasing

    初始动画的缓动效果,line 渲染动画的效果,可传入字符串值,默认为「linear」,匀速渲染。

    其他效果如「quadraticIn」、「cubicIn」等见手册处提供的官方示例:


    series[i]-line.animationEasingUpdate

    更新动画的缓动效果,line 渲染动画的效果,可传入字符串值,默认为「linear」,匀速渲染。


    • series[i]-line.data

    系列中的数据内容数组。数组项通常为具体的数据项。可传入 Object。

    Object 常见的形式有:

    1、二维数组表示

    series: [{
        data: [
            // 维度X   维度Y   其他维度 ...
            [  3.4,    4.5,   15,   43],
            [  4.2,    2.3,   20,   91],
            [  10.8,   9.5,   30,   18],
            [  7.2,    8.8,   18,   57]
        ]
    }

    其中「维度X」和「维度Y」会默认对应于平面直角坐标系的 xAxis 和 yAxis,或者极坐标系的 radiusAxis 和 angleAxis。


    2、一维数组表示

    当只有一个轴为类目轴(axis.type 为 'category')的时候,数据可以简化为一维数组。例如:

    xAxis: {
        data: ['a', 'b', 'm', 'n']
    },
    series: [{
        // 与 xAxis.data 一一对应。
        data: [23,  44,  55,  19]
        // 它其实是下面这种形式的简化:
        // data: [[0, 23], [1, 44], [2, 55], [3, 19]]
    }]


    3、数组项为(部分/全部)对象的情况

    用于数据图形样式的个性化定制,例如:

    [
        12,
        34,
        {
            value : 56,
            //自定义标签样式,仅对该数据项有效
            label: {},
            //自定义特殊 itemStyle,仅对该数据项有效
            itemStyle:{}
        },
        10
    ]
    // 或
    [
        [12, 33],
        [34, 313],
        {
            value: [56, 44],
            label: {},
            itemStyle:{}
        },
        [10, 33]
    ]

    对象的 key 支持:

    name:数据项名称,

    value:单个数据项的数值,

    symbol&symbolSize:单个数据项的图形&图形大小,

    symbolRotate:单个数据项的图形角度,

    symbolKeepAspect:单个数据项的图形是否保持宽高比,

    symbolOffset :单个数据项的图形的位置偏移量,

    label:单个数据项的文字标签,比 series[i]-line.label 优先级高,

    itemStyle:单个数据项的图形样式,比 series[i]-line.itemStyle 优先级高,

    emphasis:单个数据项的图形的高亮形式,比 series[i]-line.emphasis 优先级高,

    tooltip:单个数据项图形的提示框,比 series[i]-line.tooltip 优先级高。


    待续

    不写不知道,一写发现内容真挺多的,一个 series[i]-line 好长时间都没写完- -b,只好把一些子配置太多的配置项,留到下次写……


    另外,也在考虑是否有必要逐个介绍配置项,因为有些仅仅是官方手册的摘抄……比如只介绍些相对复杂的或有需要注意情况的?

    各位读者大人,帮我拿个主意吧- -b



    待续内容

    • series[i]-line.label

    官方描述:图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。

    该配置项有大量子配置,常用的有 show、position、color、formatter 等等,我们下次展开。


    • series[i]-line.itemStyle、series[i]-line.lineStyle、series[i]-line.areaStyle、series[i]-line.emphasis

    官方描述分别为:折线拐点标志的样式、折线线条样式、区域填充样式、图形的高亮样式。

    这 4 个配置项同样有不少子配置,下次展开。


    • series[i]-line.dimensions、series[i]-line.encode、series[i]-line.seriesLayoutBy、series[i]-line.datasetIndex

    这 4 个配置与 4.0 新功能「使用 dataset 管理数据集」有关,下次展开。


    • series[i]-line.markPoint、series[i]-line.markLine、series[i]-line.markArea、series[i]-line.tooltip

    分别用于:图标的标注、标线、标域,图形的提示框,这 4 个配置项同样有不少子配置,下次展开。

    相关推荐

    Java 泛型大揭秘:类型参数、通配符与最佳实践

    引言在编程世界中,代码的可重用性和可维护性是至关重要的。为了实现这些目标,Java5引入了一种名为泛型(Generics)的强大功能。本文将详细介绍Java泛型的概念、优势和局限性,以及如何在...

    K8s 的标签与选择器:流畅运维的秘诀

    在Kubernetes的世界里,**标签(Label)和选择器(Selector)**并不是最炫酷的技术,但却是贯穿整个集群管理与运维流程的核心机制。正是它们让复杂的资源调度、查询、自动化运维变得...

    哈希Hash算法:原理、应用(哈希算法 知乎)

    原作者:Linux教程,原文地址:「链接」什么是哈希算法?哈希算法(HashAlgorithm),又称为散列算法或杂凑算法,是一种将任意长度的数据输入转换为固定长度输出值的数学函数。其输出结果通常被...

    C#学习:基于LLM的简历评估程序(c# 简历)

    前言在pocketflow的例子中看到了一个基于LLM的简历评估程序的例子,感觉还挺好玩的,为了练习一下C#,我最近使用C#重写了一个。准备不同的简历:image-20250528183949844查...

    55顺位,砍41+14+3!季后赛也成得分王,难道他也是一名球星?

    雷霆队最不可思议的新星:一个55号秀的疯狂逆袭!你是不是也觉得NBA最底层的55号秀,就只能当饮水机管理员?今年的55号秀阿龙·威金斯恐怕要打破你的认知了!常规赛阶段,这位二轮秀就像开了窍的天才,直接...

    5分钟读懂C#字典对象(c# 字典获取值)

    什么是字典对象在C#中,使用Dictionary类来管理由键值对组成的集合,这类集合被称为字典。字典最大的特点就是能够根据键来快速查找集合中的值,其键的定义不能重复,具有唯一性,相当于数组索引值,字典...

    c#窗体传值(c# 跨窗体传递数据)

    在WinForm编程中我们经常需要进行俩个窗体间的传值。下面我给出了两种方法,来实现传值一、在输入数据的界面中定义一个属性,供接受数据的窗体使用1、子窗体usingSystem;usingSyst...

    C#入门篇章—委托(c#委托的理解)

    C#委托1.委托的定义和使用委托的作用:如果要把方法作为函数来进行传递的话,就要用到委托。委托是一个类型,这个类型可以赋值一个方法的引用。C#的委托通过delegate关键字来声明。声明委托的...

    C#.NET in、out、ref详解(c#.net framework)

    简介在C#中,in、ref和out是用于修改方法参数传递方式的关键字,它们决定了参数是按值传递还是按引用传递,以及参数是否必须在传递前初始化。基本语义对比修饰符传递方式可读写性必须初始化调用...

    C#广义表(广义表headtail)

    在C#中,广义表(GeneralizedList)是一种特殊的数据结构,它是线性表的推广。广义表可以包含单个元素(称为原子),也可以包含另一个广义表(称为子表)。以下是一个简单的C#广义表示例代...

    「C#.NET 拾遗补漏」04:你必须知道的反射

    阅读本文大概需要3分钟。通常,反射用于动态获取对象的类型、属性和方法等信息。今天带你玩转反射,来汇总一下反射的各种常见操作,捡漏看看有没有你不知道的。获取类型的成员Type类的GetMembe...

    C#启动外部程序的问题(c#怎么启动)

    IT&OT的深度融合是智能制造的基石。本公众号将聚焦于PLC编程与上位机开发。除理论知识外,也会结合我们团队在开发过程中遇到的具体问题介绍一些项目经验。在使用C#开发上位机时,有时会需要启动外部的一些...

    全网最狠C#面试拷问:这20道题没答出来,别说你懂.NET!

    在竞争激烈的C#开发岗位求职过程中,面试是必经的一道关卡。而一场高质量的面试,不仅能筛选出真正掌握C#和.NET技术精髓的人才,也能让求职者对自身技术水平有更清晰的认知。今天,就为大家精心准备了20道...

    C#匿名方法(c#匿名方法与匿名类)

    C#中的匿名方法是一种没有名称只有主体的方法,它提供了一种传递代码块作为委托参数的技术。以下是关于C#匿名方法的一些重要特点和用法:特点省略参数列表:使用匿名方法可省略参数列表,这意味着匿名方法...

    C# Windows窗体(.Net Framework)知识总结

    Windows窗体可大致分为Form窗体和MDI窗体,Form窗体没什么好细说的,知识点总结都在思维导图里面了,下文将围绕MDI窗体来讲述。MDI(MultipleDocumentInterfac...