Apache Superset堆叠柱状图如何按数值排序内部堆叠分组
Time-series Bar Chart v2 堆叠柱内按人员步数值排序实现方案
组件没有提供一键开启堆叠内按数值排序的默认配置,但可以通过数据预处理配合自定义配置实现需求,具体操作如下:
- 先按小时维度拆分原始步行步数数据集,对每个小时时段下的所有人员步数做降序排列,单独维护一份「时段-人员降序列表」的映射表,不要改动原始统计数据,避免总步数计算出错。
- 找到组件配置面板中的系列排序项,把默认的
stackOrder: 'alphabet'(按姓名字母排序)修改为custom,开启单堆叠柱的自定义排序模式。 - 将提前整理好的排序映射表传入
customSortCallback自定义排序回调,组件渲染每一根小时柱时,会按照回调返回的人员顺序从下到上堆叠柱块:排序越靠后的人员(也就是步数越高的)越靠近柱体顶部,刚好实现步数最高的人员显示在柱顶的效果。
如果遇到同一小时内两位人员步数完全一致的情况,可以在回调里补充二级排序规则(比如按人员ID排序),避免柱块渲染顺序随机跳动。
参考回调代码示例:
// 单堆叠柱自定义排序回调 customSortCallback: (stackItemList, currentHour) => { // hourPersonSortMap 为提前预处理生成的 小时->人员步数降序列表 映射 const sortRule = hourPersonSortMap[currentHour]; return sortRule.map(person => stackItemList.find(item => item.seriesName === person)); }
补充说明:如果当前使用的组件版本低于v2.8.0,会找不到customSortCallback配置项,升级到v2.8.0及以上版本即可使用该能力;如果暂时无法升级,也可以通过动态注册每个时段的人员系列实现相同效果,但数据量大时渲染性能会明显下降,不推荐使用。
内容的提问来源于stack exchange,提问作者Well
相关产品推荐
相关产品推荐

