news 2026/7/5 8:46:44

左右双向堆叠箭头条形图:Highcharts 自定义箭头柱状插件示列代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
左右双向堆叠箭头条形图:Highcharts 自定义箭头柱状插件示列代码

本案例是依托 Highcharts 开放的事件钩子与自定义矢量路径能力,可低成本开发异形柱状插件,无需底层图形渲染开发,解决原生条形样式单一、无法直观表达 “双向作用力” 的可视化痛点。

Highcharts原生兼容堆叠、正负色、数据标签、无障碍全套能力,自定义箭头条形直观区分正负向指标,代码轻量易复用,适配科研、工业、财务双向差值可视化场景。

完整可预览 HTML代码

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>自定义箭头堆叠条形图 - 火星EDL动力对比</title> <!-- 标准官方CDN依赖 --> <script src="https://code.highcharts.com/highcharts.js"></script> <script src="https://code.highcharts.com/modules/accessibility.js"></script> <style> .highcharts-figure { width: 100%; margin: 20px auto; } #container { width: 100%; height: 170px; } </style> </head> <body> <figure class="highcharts-figure"> <div id="container"></div> </figure> <script> /** * Highcharts 自定义插件:实现两端带箭头异形柱状/条形 */ (function (H) { H.addEvent( H.seriesTypes.column, 'afterColumnTranslate', function () { const series = this, options = series.options, topMargin = options.topMargin || 0, bottomMargin = options.bottomMargin || 0, idx = series.index; if (options.headSize) { series.points.forEach(function (point) { const shapeArgs = point.shapeArgs, w = shapeArgs.width, h = shapeArgs.height, x = shapeArgs.x, y = shapeArgs.y, cutLeft = idx !== 0, cutRight = point.stackY !== point.y || !cutLeft; let len = options.headSize; // 箭头像素长度 if (point.y < 0) { len *= -1; } // 保留原始矩形用于数据标签定位 point.dlBox = point.shapeArgs; // 自定义矢量路径,绘制两端箭头异形条形 point.shapeType = 'path'; point.shapeArgs = { d: [ ['M', x, y + topMargin], ['L', x + w / 2, y + topMargin + (cutRight ? len : 0)], ['L', x + w, y + topMargin], ['L', x + w, y + h], ['L', x + w / 2, y + h + bottomMargin + (cutLeft ? len : 0)], ['L', x, y + h + bottomMargin], ['L', x, y], ['Z'] ] }; }); } } ); }(Highcharts)); // 图表渲染 Highcharts.chart('container', { chart: { type: 'bar', height: 170 }, title: { text: '火星进入下降着陆阶段作用力对比' }, plotOptions: { bar: { headSize: 6, // 自定义箭头尺寸,插件专用配置项 stacking: 'normal', // 普通堆叠 dataLabels: { enabled: true, y: 20, verticalAlign: 'bottom', color: '#000' }, color: 'rgb(255, 7, 77)', // 正向力红色 negativeColor: 'rgb(1, 127, 250)', // 负向阻力蓝色 accessibility: { exposeAsGroupOnly: true } } }, tooltip: { format: '<span style="color:{point.color}">●</span> <b>{series.name}: {point.y}</b>' }, accessibility: { typeDescription: '堆叠条形受力图表,正向加速力向右展示,负向减速阻力向左展示', series: { descriptionFormat: '第{add series.index 1}组系列,名称:{series.name},{#if (gt series.points.0.y 0)}加速力{else}减速阻力{/if},数值:{series.points.0.y}' } }, yAxis: { reversedStacks: false, opposite: true, labels: { enabled: false }, title: '', stackLabels: { enabled: true, verticalAlign: 'top', style: { fontSize: '1.2em' }, format: '{#if isNegative}最小值{else}最大值{/if}:{total}' }, startOnTick: false, endOnTick: false }, xAxis: { visible: false, title: '' }, legend: { enabled: false }, series: [ // 正向叠加加速力 { name: '初始进入速度推力', data: [15] }, { name: '火星重力', data: [3] }, // 负向减速阻力 { name: '再入大气阻力', data: [-9] }, { name: '降落伞阻力', data: [-7] }, { name: '隔热罩分离阻力', data: [-0.5] }, { name: '反推火箭减速', data: [-1.5] }, { name: '天空起重机缓冲力', data: [-1] } ] }); </script> </body> </html>

图表类型解析

1. 图表类型

自定义插件异形堆叠水平条形图(bar)基于原生 column 系列扩展自定义 path 矢量路径插件,实现条形两端箭头造型;支持正负双向堆叠,正向红色向右、负向蓝色向左,适用于作用力、收支、正负差值对比场景。

2. 自定义插件核心原理

  1. 监听afterColumnTranslate渲染完成钩子,拦截每个柱子绘制逻辑;
  2. 通过headSize自定义箭头伸出长度,区分首条 / 末条堆叠块单侧显示箭头;
  3. 放弃默认矩形渲染,改用 SVG path 路径绘制带箭头的异形封闭图形;
  4. 保留原始矩形dlBox保证数据标签位置不偏移。

3. 关键业务配置拆解

  1. 双向堆叠区分正负negativeColor单独配置负值条形颜色,直观区分推力 / 阻力、收入 / 支出;
  2. 堆叠总量标签stackLabels展示左右两侧堆叠总和,标注最大 / 最小累计值;
  3. 极简坐标轴 X 轴完全隐藏,仅保留数值堆叠图形,画面干净适合仪表盘、简报;
  4. 无障碍完整适配 内置系列朗读描述,区分加速 / 减速两类力,满足科研、政务可视化无障碍规范;
  5. 统一箭头尺寸控制plotOptions.bar.headSize:6全局统一箭头大小,按需调整粗细视觉效果。

插件核心可调整参数

  1. headSize:箭头伸出像素长度,数值越大箭头越突出;
  2. topMargin / bottomMargin:条形上下留白间距;
  3. cutLeft/cutRight逻辑:自动判断堆叠首尾块,仅外侧一端渲染箭头,中间堆叠块无箭头,视觉连贯;
  4. negativeColor:负值条形专属配色,区分正负维度数据。

适用行业场景

  1. 航空航天、飞行器力学受力分析图表
  2. 财务收支双向对比堆叠图(收入正向、支出负向)
  3. 设备能耗、动力、压力正负差值监控看板
  4. 项目盈亏、流量增减双向对比简报
  5. 科研论文、技术报告自定义异形可视化图表
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 8:44:41

Codex实战指南:从零掌握AI编程助手,提升开发效率

你是不是也遇到过这样的场景&#xff1a;想写个脚本批量处理文件&#xff0c;却卡在语法细节上&#xff1b;想自动化重复的数据库操作&#xff0c;但写出来的脚本总是报错&#xff1b;或者面对一个复杂的项目重构任务&#xff0c;感觉无从下手&#xff0c;只能手动一行行修改&a…

作者头像 李华
网站建设 2026/7/5 8:39:54

Linux系统中的用户和组管理

1.用户和组分类1.1.用户分类超级用户&#xff1a;账户名 root&#xff0c;拥有所有权限&#xff0c;仅在系统维护等必要情况登录&#xff0c;以防安全问题。系统用户&#xff1a;像 bin、daemon 等&#xff0c;为保障系统正常运行设立&#xff0c;满足系统进程对文件属主要求&a…

作者头像 李华
网站建设 2026/7/5 8:39:35

【AI大模型进阶】参数入门:temperature等核心参数作用详解

【AI大模型进阶】参数入门:temperature等核心参数作用详解(含实操代码) 绝大多数AI开发新手都会陷入一个核心困境:照搬别人的大模型调用代码,却做不出同样的效果。同样的提问、同样的模型,别人输出精准严谨、适配场景,自己的回答要么天马行空、废话连篇,要么过于死板、…

作者头像 李华
网站建设 2026/7/5 8:38:18

大疆发布 Mic Mini 2S:新增存储与多麦连接能力,售价 629 元

大疆 Mic Mini 2S 发布&#xff1a;新增存储与多麦连接功能 今年 4 月大疆推出初代 Mic Mini 2 后&#xff0c;如今又在中国发布了其升级版 Mic Mini 2S&#xff0c;售价 629 元&#xff08;约合 93 美元&#xff09;。这款产品有两大核心升级&#xff0c;一是在每个发射器中新…

作者头像 李华