如何在Apache Superset deck.gl散点图中自定义图例显示统计信息
完全可以实现这个需求,核心思路是先预处理数据得到每个分类的计数和占比,再通过自定义deck.gl配置修改图例文本,具体步骤如下:
第一步:预处理数据源
先通过SQL查询生成包含分类、事件数量、占比的数据集,确保每个分类对应的计数和占比被计算出来。示例SQL如下:SELECT category AS category_label, COUNT(*) AS event_count, ROUND((COUNT(*) * 100.0) / SUM(COUNT(*)) OVER(), 2) AS percentage, x, y -- 散点图所需的坐标字段 FROM your_table GROUP BY category, x, y这里的
category是你原来的分类字段(比如Excellent(4,5)),event_count是该分类的事件总数,percentage是占比并保留两位小数。第二步:自定义deck.gl图层配置
在Superset创建deck.gl散点图后,进入编辑界面的「Customize」选项卡,找到「Deck.gl JSON Config」区域,修改图例相关配置:
你可以在图层配置中动态拼接图例标签,将分类名称、计数、占比组合起来。示例配置片段:{ "layer": "ScatterplotLayer", "data": "{{ data }}", "getPosition": "[x, y]", // 按分类设置颜色 "getColor": "d.category_label === 'Excellent(4,5)' ? [34, 139, 34] : d.category_label === 'Good(3)' ? [255, 215, 0] : [255, 99, 71]", "legend": { "type": "category", "entries": [ { "color": [34, 139, 34], "label": "Excellent(4,5) 1406 88.19%" }, { "color": [255, 215, 0], "label": "Good(3) 168 10.57%" }, { "color": [255, 99, 71], "label": "Poor(1,2) 21 1.32%" } ] } }如果你希望动态从数据中获取计数和占比(而不是硬编码),可以通过遍历聚合后的分类数据来生成图例条目,这需要你对deck.gl的配置语法有一定了解,利用Superset提供的模板变量
{{ data }}来动态提取数据。替代方案:使用计算字段(需配合聚合)
若不想修改底层SQL,可在Superset数据集的「计算字段」中创建一个拼接字段,比如:CONCAT(category_label, ' ', event_count, ' ', percentage, '%')但要注意,
event_count和percentage必须是聚合后的字段,所以需要确保数据集已经按分类完成聚合。
如果Superset默认的deck.gl组件配置不够灵活,你也可以通过开发自定义可视化插件来进一步扩展图例的显示逻辑,但上述方法足以覆盖大部分场景。
内容的提问来源于stack exchange,提问作者Santosh Kumar Sahoo

