ECharts官方教程(十二)【自定义系列】

【Echarts第四篇】用自定义图标渲染数据 前言: 项目中遇到一个需求,将Y轴数据源中的不同字段用对应的自定义图标展示,正好Echarts支持自定义系列图标,实现起来挺方便,所以我又自己做了一个小栗子,总结一下Echarts自定义系列的用法。 这是下文例子的成品demo,包含两个系列(series)的Echarts图,其中一个是普通的折线图,另一个则是根据数据自定义的系列。 一、Echarts自定义系列介绍 Echarts的自定义系列支持自定义系列中的图形元素,核心API如下: series: [ { type: custom, //指定系列类. 阅读详情
AI摘要

本文介绍了ECharts中自定义系列(customseries)的功能,通过该功能开发者可以自由绘制图表元素,满足个性化需求。文章详细解释了如何使用renderItem方法、设定坐标轴与数据的映射关系、配置tooltip等内容。

自定义系列

自定义系列(custom series),是一种系列的类型。它把绘制图形元素这一步留给开发者去做,从而开发者能在坐标系中自由绘制出自己需要的图表。

echarts 为什么会要支持 自定义系列 呢?echarts 内置支持的图表类型是最常见的图表类型,但是图表类型是难于穷举的,有很多小众的需求 echarts 并不能内置的支持。那么就需要提供一种方式来让开发者自己扩展。另一方面,所提供的扩展方式要尽可能得简单,例如图形元素创建和释放、过渡动画、tooltip、数据区域缩放(dataZoom)、视觉映射(visualMap)等功能,尽量在 echarts 中内置得处理,使开发者不必纠结于这些细节。综上考虑形成了 自定义系列(custom series)。

例如,下面的例子使用 custom series 扩展出了 x-range 图:

<iframe src="http://echarts.baidu.com/gallery/view.html?c=custom-profile&amp;reset=1&amp;edit=1" width="800" height="500"></iframe>

更多的例子参见:custom examples

下面来介绍开发者怎么使用 自定义系列(custom series)。

(一)renderItem 方法

开发者自定义的图形元素渲染逻辑,是通过书写 renderItem 函数实现的,例如:

var option = {
    ...,
    series: [{
        type: 'custom',
        renderItem: function (params, api) {
            // ...
        },
        data: data
    }]
}

在渲染阶段,对于 series.data 中的每个数据项(为方便描述,这里称为 dataItem),会调用此 renderItem 函数。这个 renderItem 函数的职责,就是返回一个(或者一组)图形元素定义,图形元素定义 中包括图形元素的类型、位置、尺寸、样式等。echarts 会根据这些 图形元素定义 来渲染出图形元素。如下的示意:

var option = {
    ...,
    series: [{
        type: 'custom',
        renderItem: function (params, api) {
            // 对于 data 中的每个 dataItem,都会调用这个 renderItem 函数。
            // (但是注意,并不一定是按照 data 的顺序调用)

            // 这里进行一些处理,例如,坐标转换。
            // 这里使用 api.value(0) 取出当前 dataItem 中第一个维度的数值。
            var categoryIndex = api.value(0);
            // 这里使用 api.coord(...) 将数值在当前坐标系中转换成为屏幕上的点的像素值。
            var startPoint = api.coord([api.value(1), categoryIndex]);
            var endPoint = api.coord([api.value(2), categoryIndex]);
            // 这里使用 api.size(...) 获得 Y 轴上数值范围为 1 的一段所对应的像素长度。
            var height = api.size([0, 1])[1] * 0.6;

            // 这里返回为这个 dataItem 构建的图形元素定义。
            return {
                // 表示这个图形元素是矩形。还可以是 'circle', 'sector', 'polygon' 等等。
                type: 'rect',
                // shape 属性描述了这个矩形的像素位置和大小。
                // 其中特殊得用到了 echarts.graphic.clipRectByRect,意思是,
                // 如果矩形超出了当前坐标系的包围盒,则剪裁这个矩形。
                shape: echarts.graphic.clipRectByRect({
                    // 矩形的位置和大小。
                    x: startPoint[0],
                    y: startPoint[1] - height / 2,
                    width: endPoint[0] - startPoint[0],
                    height: height
                }, {
                    // 当前坐标系的包围盒。
                    x: params.coordSys.x,
                    y: params.coordSys.y,
                    width: params.coordSys.width,
                    height: params.coordSys.height
                }),
                // 用 api.style(...) 得到默认的样式设置。这个样式设置包含了
                // option 中 itemStyle 的配置和视觉映射得到的颜色。
                style: api.style()
            };
        },
        data: [
            [12, 44, 55, 60], // 这是第一个 dataItem
            [53, 31, 21, 56], // 这是第二个 dataItem
            [71, 33, 10, 20], // 这是第三个 dataItem
            ...
        ]
    }]
}

renderItem 函数提供了两个参数:

params:包含了当前数据信息(如 seriesIndex、dataIndex 等等)和坐标系的信息(如坐标系包围盒的位置和尺寸)。
api:是一些开发者可调用的方法集合(如 api.value()、api.coord())。

renderItem 函数须返回根据此 dataItem 绘制出的图形元素的定义信息,参见 renderItem.return。

一般来说,renderItem 函数的主要逻辑,是将 dataItem 里的值映射到坐标系上的图形元素。这一般需要用到 renderItem.arguments.api 中的两个函数:

api.value(...),意思是取出 dataItem 中的数值。例如 api.value(0) 表示取出当前 dataItem 中第一个维度的数值。
api.coord(...),意思是进行坐标转换计算。例如 var point = api.coord([api.value(0), api.value(1)]) 表示 dataItem 中的数值转换成坐标系上的点。

有时候还需要用到 api.size(…) 函数,表示得到坐标系上一段数值范围对应的长度。

返回值中样式的设置可以使用 api.style(…) 函数,他能得到 series.itemStyle.normal 中定义的样式信息,以及视觉映射的样式信息。也可以用这种方式覆盖这些样式信息:api.style({fill: ‘green’, stroke: ‘yellow’})。

书写完 renderItem 方法后,自定义系列的 90% 工作就做完了。剩下的是一些精化工作。

(二)使坐标轴的范围自适应数据范围

在 直角坐标系(grid)、极坐标系(polar) 中都有坐标轴。坐标轴的刻度范围需要自适应当前显示出的数据的范围,否则绘制出的图形会超出去。所以,例如,在 直角坐标系(grid) 中,使用自定义系列的开发者,需要设定,data 中的哪些维度会对应到 x 轴上,哪些维度会对应到 y 轴上。这件事通过 encode 来设定。例如:

option = {
    series: [{
        type: 'custom',
        renderItem: function () {
            ...
        },
        encode: {
            // data 中『维度1』和『维度2』对应到 X 轴
            x: [1, 2],
            // data 中『维度0』对应到 Y 轴
            y: 0
        },
        data: [
            // 维度0  维度1  维度2  维度3
            [   12,   44,   55,   60   ], // 这是第一个 dataItem
            [   53,   31,   21,   56   ], // 这是第二个 dataItem
            [   71,   33,   10,   20   ], // 这是第三个 dataItem
            ...
        ]
    }]
};

(三)设定 tooltip

当然,使用 tooltip.formatter 可以任意定制 tooltip 中的内容。但是还有更简单的方法,通过encode 和 dimensions 来设定:

option = {
    series: [{
        type: 'custom',
        renderItem: function () {
            ...
        },
        encode: {
            x: [1, 2],
            y: 0,
            // 表示『维度2』和『维度3』要显示到 tooltip 中。
            tooltip: [2, 3]
        },
        // 表示给『维度2』和『维度3』分别取名为『年龄』和『满意度』,显示到 tooltip 中。
        dimensions: [null, null, '年龄', '满意度'],
        data: [
            // 维度0  维度1  维度2  维度3
            [   12,   44,   55,   60   ], // 这是第一个 dataItem
            [   53,   31,   21,   56   ], // 这是第二个 dataItem
            [   71,   33,   10,   20   ], // 这是第三个 dataItem
            ...
        ]
    }]
};

(四)其他注意事项

(1)与 dataZoom 结合使用的时候,常常使用会设置 dataZoom.filterMode 为 ‘weakFilter’。这个设置的意思是:当 dataItem 部分超出坐标系边界的时候,dataItem 不会整体被过滤掉。例如:

option = {
    dataZoom: {
        xAxisIndex: 0,
        filterMode: 'weakFilter'
    },
    series: [{
        type: 'custom',
        renderItem: function () {
            ...
        },
        encode: {
            // data 中『维度1』和『维度2』对应到 X 轴
            x: [1, 2],
            y: 0
        },
        data: [
            // 维度0  维度1  维度2  维度3
            [   12,   44,   55,   60   ], // 这是第一个 dataItem
            [   53,   31,   21,   56   ], // 这是第二个 dataItem
            [   71,   33,   10,   20   ], // 这是第三个 dataItem
            ...
        ]
    }]
};

在这个例子中,『维度1』和『维度2』对应到 X 轴,dataZoom 组件控制 X 轴的缩放。假如在缩放的过程中,某个 dataItem 的『维度1』超出了 X 轴的范围,『维度2』还在 X 轴的范围中,那么只要设置 dataZoom.filterMode = 'weakFilter',这个 dataItem 就不会被过滤掉,从而还能够使用 renderItem 绘制图形(可以使用上面提到过的 echarts.graphic.clipRectByRect 把图形绘制成被坐标系剪裁过的样子)。参见上面提到过的例子:Profile

(2)另外,开发者如果使用到的话应注意,renderItem.arguments.params 中的 dataIndex 和 dataIndexInside 是有区别的:

dataIndex 指的 dataItem 在原始数据中的 index。
dataIndexInside 指的是 dataItem 在当前数据窗口(参见 dataZoom)中的 index。

renderItem.arguments.api 中使用的参数都是 dataIndexInside 而非 dataIndex,因为从 dataIndex 转换成 dataIndexInside 需要时间开销。

更多的自定义系列的例子参见:custom examples

通过echarts的custom自定义系统,渲染任务执行甘特图 项目中有个图表比较难搞,一开始没什么头绪,后来百度了挺久,结合一些大佬发的信息,总算搞出来了,先看一下效果图。 阅读详情

相关推荐

如何用Echart正确的绘制甘特图(适用于React)

前言 之前实现作业车间调度问题甘特图绘制,搜索过如何用Echart绘制甘特图,发现绘制方法都一毛一样,都是通过叠加series来实现,但这样绘制出来的甘特图,不仅够丑,而且数据也难以描述,如果要在react这种mvvm中绘制的话,也没法对甘特图做数据管理,所以经过自己的思考,发现可以有更好的绘制甘特图的方法。首先先看绘制出来的甘特图效果(项目GitHub地址:https://github.com...

daydream13580130043的博客 7939

echarts自定义renderItem柱状图,每个系列柱子数不一样

话不多说,先上图 业务需求是,在【前期库存中】,显示四年的数量;后面的1-12月每个系列中最多显示两个柱子。 在echarts官方实例中,系列的数量是由 series 数组中的数量决定的,也就是说该数组中有几个数据项,就有几根柱子,但是每个系列项的柱子数是一样的。这样是不满足我的需求的。所以接下来就要开始寻找其他解决方式。 后来发现了echarts提供了自定义的渲染方式,series-c...

Curry的博客 1万+

echarts 自定义 睡眠

#FFD157’,‘#C9C7F3’,‘#605BD0’,[12, 2],[38, 3],[4, 2],[58, 3],[38, 2],[46, 3],[20, 1],[32, 2],[98, 3],[12, 2],[4, 1],[20, 2],[50, 3],[50, 2],[8, 1],[68, 2],arr[0] = 0} else {// 数据数组。

weixin_45052435的博客 1792

echarts - 自定义形状 - 实现立体柱状图

如果需要复杂的图表样式,echarts 自带的 series 类型无法满足,那么就可以使用 custom 类型,这时就需要通过 canvas 手动绘制图表的形状了。

qq_35432583的博客 6159

Echarts学习6_Echarts官方实例

&lt;!DOCTYPE html&gt; &lt;html style="height: 100%"&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;/head&gt; &lt;body style="height: 100%; margin: 0"&gt;

wang_zhenwei的博客 1918

Echarts(一)官方文档5分钟上手Echarts

数据类工作每天需要跟数据打交道,而从数据中获取更多信息的一种方式便是“图表”,Echarts(Enterprise Charts,商业级数据图表,百度的开源前端产品。官方网址https://echarts.baidu.com/。)是一款优秀的构建图表的开源可视化工具,值得数据类工作从业者学习。 Echarts的官方文档提供了良好的入门指引,首先是5分钟上手echarts,学习地址https...

qq_25955871的博客 3666

Echarts 自定义系列

Echarts 自定义系列1. 官方2. 代码3. 效果 1. 官方 官方例子: https://www.echartsjs.com/examples/zh/index.html#chart-type-custom 官方手册: https://www.echartsjs.com/zh/option.html#series-custom 2. 代码 代码上有详细的解释 <!DOCT...

YKenan的博客 1722

ThingsBoard教程(十二):部件库中使用echarts

在部件库中使用echarts,引入外部资源

知无涯 4460

07ECharts 自定义系列

什么是 ECharts 自定义系列? 自定义系列(custom series)是一种系列的类型,它能够让用户定制渲染逻辑,在已有的坐标系中创造新的图表;并且增强了极坐标柱状图、自定义维度映射、dataZoom 等 。 自定义系列(custom series)它把绘制图形元素这一步留给开发者去做,从而开发者能在坐标系中自由绘制出自己需要的图表。 ECharts 为什么会支持自定义系列? 由于图表的类型多种多样,要让 ECharts 内置支持所有类型的图表是很难的,有很多小众的需求 ECharts 并不能内置的

Dove_1234的博客 2708

告别卡顿!手把手教你用北鲲云超算平台图形化提交COMSOL仿真任务(附RDP连接技巧)

本文详细介绍了如何利用北鲲云超算平台图形化提交COMSOL仿真任务,解决本地计算资源不足导致的卡顿问题。通过云端高性能计算,用户可轻松配置多核CPU和大内存资源,实现高效仿真计算,并附有RDP连接优化技巧,提升远程操作体验。

weixin_42519781的博客 378

Rust嵌入式开发环境搭建指南(基于Stm32+Vscode)

本文档旨在指导开发者如何搭建基于Rust语言的STM32嵌入式开发环境。相比传统的C/C++开发方式,Rust提供了更强的内存安全保障和现代化的语言特性,非常适合嵌入式系统开发。本指南将详细介绍从环境搭建到项目配置的全过程,特别关注VSCode作为IDE的配置以及STLink和DAPLink调试器的使用。

u014627020的博客 2601

ECharts地图,echarts自定义map地图,echarts添加标注,自定义坐标、图标、icon

ECharts如何自定义省、市、县区地图(各省市直辖区的map地图),ECharts如何在地图上自定义图片、图标,根据经纬度显示自定义建筑图片、添加自定义覆盖物 前言 最近在做一个项目中,需求是:要显示中国某个省份下,某个市的地图,而地图还要有块级效果,自定义地图颜色,还要在地图上显示不同的建筑物图片,还要每隔几秒后(数据是从后端用ws实时推送过来的,要根据推送过来的数据,动态切换显示对......

沐枫 6万+

ROS基础(一)——命令行代码(以小乌龟程序为例)

ROS学习(一)——命令行代码(以小乌龟程序为例)1 基础命令行语句1.1 roscore1.2 rqt_graph(显示系统计算图)1.3 rosnode(显示所有节点相关信息)1.4 rostopic(和话题相关)2 服务类型指令rosservice同时存在两只海龟3 指令记录 1 基础命令行语句 从大二四旋翼无人机编队后就没再接触过ROS了,最近由于科研任务需要重新捡起来,打算系统学一下!学习过程参考古月居老师的视频,有兴趣的同学可以去[BliBli]学习。 学习平台:Ubuntu 18.04 硬件

北理自动化小白 6261

echarts自定义tooltip提示框内容

echarts 是一个非常强大的图形编辑工具,对各种数据统计的图形话处理效果非常nice!由于在工作中经常会用到,在此以作总结,也算一种积累。 本文主要是对echarts的tooltip提示功能的一个总结。 tooltip的一些常用属性: (1)提示内容对其方式:textStyle。textStyle:{ align:'left' }, tooltip的align的值可以有“cente

dreamsup的博客 18万+

SEED-VII 实战指南:如何利用多模态脑电图数据提升情感识别精度

本文提供了SEED-VII多模态脑电图数据集的实战指南,详细介绍了如何利用该数据集提升情感识别精度。内容涵盖数据获取、预处理、特征提取,以及构建多模态融合神经网络模型的关键步骤,并强调了被试者独立评估的重要性,为情感计算研究者提供了从数据到模型的全流程解决方案。

weixin_29196891的博客 316

细聊Oracle通过ODBC数据源连接SQL Server数据库

    类似文章搜索引擎上有很多,内容大致相同,今天所谓细聊是因为我在借鉴这些文章时候走了些弯路,所以写此文,为自己备忘,同时如果能为初涉此处知识点的小伙伴提供些帮助就更好了,废话不多说。    我的应用场景:    项目系统使用oracle数据库,与客户的第三方系统供应商实现资源共享,对方为sql server数据库;    我的测试开发环境为64bitwin7PC机,本机上装有64位Oracl...

xueren_83的博客 1万+

ECharts实战教程

pink老师讲解的ECharts可视化项目。。。

星航夜空的帆舟 7047

4.DJI-PSDK云台x-port控制:

使用PSDK 的“云台控制”功能,开发者需要先设计负载设备的云台并开发出控制云台的程序,将云台的控制函数注册到PSDK 指定的接口后,用户通过使用DJI Pilot、基于MSDK 开发的移动端App 及遥控器即可控制基于PSDK 开发的具有云台功能的负载设备,同时获得负载设备的相关信息,如姿态等。云台的姿态如 图2.云台姿态 所示,根据用户的控制指令,云台能够调整姿态;云台的关节如 图1.云台关节 所示,云台关节是云台上带动负载设备转动的结构件:云台电机,云台关节角即云台电机转动的角度。

哒宰的博客 855

ECharts教程(详细)

非常全面的ECharts教程,目前线条/节点颜色、线条粗细、线条样式、线条阴影、线条平滑、线条节点大小、线条节点阴影、线条节点边框、线条节点边框阴影、工具提醒、工具提醒样式、工具自定义提醒、工具提醒背景、工具提醒边框、工具提醒阴影、工具提醒文字样式、工具箱、工具箱图标、工具箱标题、工具箱功能、类别显示、类别显示位置、类别显示图标、类别显示图标大小、类别显示图标间距、类别显示、类别显示位置、类别显示图标、类别显示图标大小、类别显示图标间距、类别显示图标文字大小、类别显示图标文字颜色、轴方向等多达四十个快捷键使

qq_41974199的博客 1万+

Vue3 - 详细实现接入使用海康威视监控云端显示及控制功能,网站集成安装海康监控及实时监控显示、回放、放大缩小画面、视频画面截图、截屏抓拍、摄像头控制,实时推流及播放器解决延迟卡顿等问题(详细代码)

vue3,nuxt3,海康威视,海康监控,摄像头监控,实时监控画面,海康插件,视频播放,回放,视频流地址,取流协议,视频sdk播放,hik,rtsp,rtmp,hls,ws,网站,网页,h5页面,后台管理系统,vue3对接海康监控设备,无法连接,报错,vue3对接海康处理接口认证规则,监控实时预览和回放功能,海康api接口,安全认证,海康开放平台,官方文档,播放海康摄像头的监控视频,海康实时监控播放详细步骤,web,黑屏,特别卡不流畅怎么办,解决无法推流,录像,连接不上,vue3,海康,vue海康视频监控,

🏆 前端领域优质创作者 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

echarts自定义legend样式的详细图文教程

最近要完成显示一个饼图,使用echarts组件,先用官方给定的模板加载出样式,然后修改为自定义的样式。,在 rich 里面,可以自定义富文本样式,使三列文字的中间那一列展示为灰色,两边文字为黑色。然后在textStyle里设置各自的样式,设置后的代码如下,注意备注【添加】的地方是主要更改。接着就是右边一段文字到三段文字的显示,不止要展示出name,还要展示出百分比和数量。首先把文字分为3段,a表示name,b表示百分比, c表示value数量。首先可以看到,图标默认是长方形,而需求是小圆点。

snow_living的博客 3万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

echarts自定义系列直方图放大后两端消失

echarts自定义系列实现的直方图或者矩形图,当放大图形时,如果矩形的一边到了x轴的可视区域外,则这个矩形就会不展示。需要我们一些额外的处理,解决这个问题。

weixin_44196453的博客 931

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ECharts自定义系列:打造独一无二的可视化效果

自定义系列(Custom Series)是ECharts提供的一种强大功能,允许开发者完全控制图形的渲染过程,实现标准图表类型无法满足的特殊可视化需求。通过自定义系列,开发者可以创建独特的图表效果、实现复杂的交互逻辑和定制化的数据展示方式。本文将深入探讨如何使用ECharts自定义系列,从基础的图形绘制到复杂的可视化效果实现。通过丰富的实例和最佳实践,帮助开发者掌握ECharts自定义系列的各种配置选项和开发技巧,提升数据可视化创新能力。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1259

Echarts自定义提示内容

echarts 默认带的提示框是显示系列名和value数值。有的时候我们需要自己根据不同情况定义他显示的内容 例如echarts 默认显示的样式为 想要展示的为 代码如下 var option = { title: { text: name }, tooltip: { show: true,//设置是否显示提示框 trigger:

weixin_48366131的博客 2477

Echarts可视化 之custom自定义系列

renderItem函数

heal_l的博客 6934
上一篇: ECharts官方教程(十一)【小例子:实现日历图】
下一篇: ECharts官方教程(十三)【富文本标签】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值