如何在 Superset 中集成自定义 Echarts 饼图

Words 2419Read Time 7 min
2020-4-28
2026-2-11
cover
type
Post
status
Published
date
Apr 28, 2020 13:41
slug
summary
本文详细介绍了如何在Apache Superset中集成Echarts饼图组件的完整流程。从前端开发(创建插件结构、实现核心文件、注册组件、配置控制面板)到后端开发(修改viz.py、实现数据处理逻辑),涵盖了所有必要的代码实现和配置步骤。文章还展示了镂空和实心两种饼图效果,并探讨了业务分析、用户行为分析等实际应用场景。通过掌握这套方法,开发者可以轻松扩展Superset的可视化能力,打造符合特定业务需求的自定义图表。
tags
Superset
React
category
Data Engineering
icon
password
wordCount
2414
在数据可视化的世界里,Apache Superset 是一款强大的开源 BI 工具,但有时候它自带的图表类型可能无法满足我们的特定需求。本文将手把手教你如何在 Superset 中集成 Echarts 饼图组件,让你的数据可视化更加灵活多样。
🎯
核心内容 • 前端开发:创建自定义 Echarts 饼图组件 • 后端开发:实现数据处理和图表渲染逻辑 • 完整的代码实现和配置步骤 • 支持镂空/实心饼图、自定义图例位置等功能

实验环境

在开始我们的"魔法"之前,先确保你的工具箱里有这些东西:
  • Windows10
  • python 3.68
  • pip 19.2.3
  • setuptools 41.4.0
  • nodejs 12.15.0
  • npm 6.134
  • superset 0.35
💡
提示:虽然本文基于 Superset 0.35 版本,但整体思路同样适用于其他版本,只需要注意 API 的差异即可。

前端开发:让图表"活"起来

前端开发是整个集成过程的核心,我们需要创建一个完整的 Echarts 饼图插件。

创建项目结构

首先,在 visualizations 文件夹下创建 EchartsPie 文件夹,这将是我们的"根据地"。
notion image
images 文件夹里放入图表的缩略图。你可以去 Echarts 官网截个图,记得文件名要保持为 thumbnail.png,不然 Superset 可找不到它。

核心文件实现

index.js - 插件入口
这是我们插件的"身份证",告诉 Superset:"嘿,我是一个新图表类型!"
transformProps.js - 数据转换器
这个文件就像一个"翻译官",把前端和后端的数据"语言"互相翻译。
ReactEchartsPie.js - React 包装器
简单的一层包装,让我们的原生组件能在 React 世界中愉快地玩耍。
EchartsPie.js - 图表渲染核心
这是整个前端的"大脑",负责把数据变成漂亮的饼图。

注册插件

修改 MainPreset.js
/visualizations/presets/MainPreset.js 中注册我们的新插件:
notion image
修改 VizTypeControl.jsx
让我们的饼图出现在图表类型选择列表中。修改 /explore/components/controls/VizTypeControl.jsx,在 DEFAULT_ORDER 变量中添加 'echarts_pie'

配置控制面板

创建 EchartsPie.js 控制面板
/explore/controlPanels/ 下新建 EchartsPie.js,这是用户配置图表的界面:
notion image
修改 controls.jsx
/explore/controls.jsx 文件最下面添加控制项定义:
notion image
修改 setupPlugins.ts
/setup/setupPlugins.ts 中注册控制面板:
notion image
安装 Echarts 依赖
修改 package.json,引入 Echarts npm 包(如果已经引入则跳过):
notion image

后端开发:数据处理的"指挥官"

前端搭好了舞台,后端就要负责提供"演员"(数据)了。

修改 viz.py

添加 Metric 配置
superset/viz.py 中找到 METRIC_KEYS,添加我们的 metrics:
实现图表类
viz_types 变量定义之前,添加 EchartsPieViz 类:

运行与测试

安装依赖

如果还没有安装 Echarts,先安装:

编译前端

重新编译前端代码(这一步可能需要几分钟,去喝杯咖啡吧☕️):
⚠️
注意:编译过程中可能会遇到内存不足的问题,可以尝试增加 Node.js 的内存限制:NODE_OPTIONS=--max_old_space_size=4096 npm run build

启动 Superset

运行 Superset 后台,访问界面创建一个图表:
notion image

效果展示

镂空饼图
优雅的圆环设计,数据一目了然:
notion image
实心饼图
经典的饼图样式,简洁直观:
notion image

应用场景与扩展

这个自定义饼图组件可以应用在很多场景:
  • 业务数据分析:展示各部门销售占比、市场份额分布等
  • 用户行为分析:展示用户来源渠道、设备类型分布等
  • 资源监控:展示服务器资源使用情况、存储空间分配等
你还可以基于这个实现进一步扩展:
  • 添加动画效果,让图表更生动
  • 支持多层嵌套饼图
  • 添加数据钻取功能
  • 实现图表主题定制
🚀
未来展望:随着 Superset 和 Echarts 的不断发展,我们可以期待更多开箱即用的图表类型。但掌握了自定义集成的方法,你就能打造真正符合业务需求的可视化方案。

总结

通过本文,我们完成了从零到一集成 Echarts 饼图到 Superset 的完整过程。这不仅仅是一个技术实现,更是一次对 Superset 架构的深入理解。
核心要点回顾:
  • 前端开发:创建插件、配置控制面板、注册组件
  • 后端开发:实现数据处理逻辑、定义图表类型
  • 灵活配置:支持镂空/实心切换、图例位置自定义等
希望这篇文章能帮助你在数据可视化的道路上走得更远。如果你有任何问题或想法,欢迎交流探讨!

参考文章

Loading...