billboard.js如何为各数据系列设置自定义标签
billboard.js 自定义数据系列标签实现方案
完全支持你要的效果:不需要依赖数据点的数值、系列id、索引值,就能给每个数据系列单独设置自定义标签,也能实现「图例显示城市名、数据标签显示国家名」的需求。
关于texts参数为空的问题
文档里提到的texts参数是billboard.js内部维护的、当前系列已渲染完成的标签文本集合,属于回调执行过程中的内部收集值,不是需要用户手动传入的配置项。在format函数执行的标签渲染阶段,这个参数本来就是空的,不需要尝试往这个参数里传自定义标签数组。
具体实现方法
你只需要提前维护好自己的标签映射关系,在按系列配置format回调时直接返回自定义文本即可,不需要用到回调里的数值、id、索引参数。
对应你业务场景的配置示例如下:
// 提前维护维度映射:key为数据系列ID(直接用城市名,图例默认读取该值显示),value为数据标签要展示的国家名 const customLabelMap = { beijing: "中国", shanghai: "中国", tokyo: "日本", seoul: "韩国", paris: "法国" } bb.generate({ data: { columns: [ ["beijing", 120, 180, 220, 90], ["shanghai", 150, 200, 190, 130], ["tokyo", 80, 60, 110, 75], ["seoul", 70, 95, 84, 102], ["paris", 110, 88, 130, 99] ], labels: { format: { // 每个系列直接返回对应自定义标签即可,不需要读取回调参数 beijing: () => customLabelMap.beijing, shanghai: () => customLabelMap.shanghai, tokyo: () => customLabelMap.tokyo, seoul: () => customLabelMap.seoul, paris: () => customLabelMap.paris } } }, bindto: "#chartContainer" })
如果你的数据系列是动态生成的,不需要手写每个系列的format配置,只要在生成图表配置前,遍历原始数据列表动态拼接format对象即可。
扩展:同系列不同数据点显示不同自定义标签
如果后续需要同一个系列下的不同数据点显示不同文本,只需要把映射结构调整为按索引存文本的数组,在回调里读取第三个参数(数据点索引i)返回对应值即可,同样不需要依赖数据本身的数值:
const pointLabelMap = { beijing: ["一季度", "二季度", "三季度", "四季度"] } // 对应format配置 format: { beijing: (v, id, i) => pointLabelMap.beijing[i] }
内容的提问来源于stack exchange,提问作者bolaadebesin
相关产品推荐
相关产品推荐

