Superset能否实现兼具分组与堆叠效果的组合柱状图?
Superset 实现分组+堆叠混合柱状图方案
针对你需要的「按城市分组对比,组内堆叠不同产品销售额」的需求,Superset原生柱状图的单纯堆叠/分组模式确实无法直接满足,但可以通过以下几种方式解决:
方法1:利用新版本Superset的分层堆叠功能(推荐)
如果你的Superset版本在v2.1及以上,原生柱状图支持分层堆叠配置:
- 在图表配置的
BREAKDOWN栏中,按顺序添加维度:先选城市作为分组维度,再选产品类型作为堆叠维度 - 切换到「样式」标签页,找到「堆叠模式」,选择分组堆叠选项
- 将X轴设置为你需要的时间维度(比如月份),即可实现每个时间节点下,按城市分组、组内堆叠产品销售额的效果
方法2:自定义SQL预处理数据(兼容所有版本)
如果是旧版本Superset,先通过自定义SQL提前聚合数据:
SELECT date_trunc('month', sale_date) AS sale_month, -- 按月份聚合,可替换为你的时间维度 city, product_type, SUM(sales_amount) AS total_sales FROM your_sales_table -- 替换为你的数据表名 GROUP BY sale_month, city, product_type ORDER BY sale_month, city
完成数据预处理后,在柱状图配置中:
- X轴选择
sale_month BREAKDOWN按顺序添加city和product_type- 在「样式」中开启「堆叠」,并将
city设置为分组维度,即可实现目标效果
方法3:自定义ECharts图表(灵活度最高)
如果前两种方法无法满足,可以通过Superset的自定义ECharts插件实现完全自定义的分组堆叠逻辑:
- 安装Superset的ECharts扩展插件后,直接编写ECharts配置项,核心示例如下:
option = { xAxis: { type: 'category', data: ['2024-01', '2024-02'] }, // 替换为你的时间维度数据 yAxis: { type: 'value', name: '销售额' }, tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } }, legend: { data: ['城市A-产品1', '城市A-产品2', '城市B-产品1', '城市B-产品2'] }, series: [ { name: '城市A-产品1', type: 'bar', stack: '城市A', data: [120, 180] }, { name: '城市A-产品2', type: 'bar', stack: '城市A', data: [90, 150] }, { name: '城市B-产品1', type: 'bar', stack: '城市B', data: [100, 160] }, { name: '城市B-产品2', type: 'bar', stack: '城市B', data: [80, 130] } ] };
这种方式可以根据你的数据结构灵活调整分组和堆叠规则。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

