如何在Apache ECharts的renderItem中绘制自定义三角形
在Apache ECharts Custom系列中绘制自定义三角形
问题描述
需要在Apache ECharts的custom系列中,通过renderItem方法绘制自定义三角形。已有绘制矩形的实现示例,但未找到三角形的实现方案,计划使用polygon来实现。
原矩形绘制代码
series: [ { .... type: 'custom', renderItem: renderGanttItem, .... } ]
var rectNormal = clipRectByRect(params, { x: x, y: y, width: barLength, height: barHeight }); return { type: 'group', children: [ { type: 'rect', ignore: !rectNormal, shape: rectNormal, style: api.style() } ] }; } function clipRectByRect(params, rect) { return echarts.graphic.clipRectByRect(rect, { x: params.coordSys.x, y: params.coordSys.y, width: params.coordSys.width, height: params.coordSys.height }); }
需求效果

实现方案
可以直接通过polygon类型实现三角形绘制,核心是定义三角形的三个顶点坐标,并适配坐标系裁剪逻辑,以下是修改后的完整实现:
1. 修改renderItem绘制逻辑
替换原矩形绘制为多边形(三角形)绘制,计算顶点并处理裁剪:
function renderGanttItem(params, api) { // 替换为你实际的坐标计算逻辑,这里沿用原矩形的坐标参数示例 var x = api.value(0); var y = api.value(1); var barHeight = 20; // 三角形的高度(对应原矩形高度) var barLength = 30; // 三角形的底边/边长 // 根据需求效果定义三角形顶点(示例为向右的三角形:上、下、右三个点) var trianglePoints = [ [x, y - barHeight / 2], [x, y + barHeight / 2], [x + barLength, y] ]; // 对三角形顶点进行可视区域裁剪 var clippedPoints = echarts.graphic.clipPointsByRect(trianglePoints, { x: params.coordSys.x, y: params.coordSys.y, width: params.coordSys.width, height: params.coordSys.height }); // 裁剪后顶点不足3个则忽略绘制 var shouldRender = clippedPoints.length >= 3; return { type: 'group', children: [ { type: 'polygon', ignore: !shouldRender, shape: { points: clippedPoints }, style: api.style() } ] }; }
2. 关键细节说明
- 顶点调整:根据截图中的三角形方向,可修改
trianglePoints的坐标。比如需要向左的三角形,只需把第三个顶点的X坐标改为x - barLength即可。 - 裁剪适配:用
echarts.graphic.clipPointsByRect替代原矩形裁剪方法,专门处理多边形顶点的可视区域裁剪。 - 样式复用:通过
api.style()继承系列配置的颜色、边框等样式,和原矩形逻辑保持一致。
3. 不同方向三角形示例
- 向左的三角形顶点:
var trianglePoints = [ [x, y - barHeight / 2], [x, y + barHeight / 2], [x - barLength, y] ]; - 向上的三角形顶点:
var trianglePoints = [ [x - barLength / 2, y], [x + barLength / 2, y], [x, y - barHeight] ];
内容的提问来源于stack exchange,提问作者maks
相关产品推荐
相关产品推荐

