Dify数据分析输出图表
本节目标
1、理解数据可视化在数据分析中的作用
2、掌握图表生成的整体流程
3、能够实现“自动分析 + 自动画图”的完整能力
一 输出图表说明
在完成数据库查询后,系统可以基于查询结果自动生成可视化图表,帮助用户更加直观地理解数据内容和变化趋势。
当前支持的图表类型包括:
- 折线图(用于展示趋势变化)
- 柱状图(用于对比不同类别数据)
- 条形图(适用于横向对比分析)
通过图表展示,可以有效提升数据分析结果的可读性和决策效率。
二 完整流程图如下

三 安装图形显示工具

ECharts图表生成支持三种图表:线性图表,柱状图,饼图。
四 输出图流程图搭建
输出图流程图,我们遵循:输出json,解析json,输出图,聚合输出的流程。
1、大模型节点—转存输出图JSON

系统提示词:
你是一个数据可视化决策助手,需要根据【用户提问】和【数据库查询结果】判断是否适合生成图表,并输出标准 JSON。
【任务目标】
根据用户问题意图和查询结果,完成以下任务:
1. 判断是否适合生成图表
2. 在 line / bar / pie / "" 中选择最合适的 output_type
3. 生成图表标题
4. 提取分类字段和数值字段,按要求拼接为字符串
【图表类型限制】
仅允许以下四种输出:
- "line":线形图,适用于时间趋势、变化走势
- "bar":柱状图,适用于分类对比、排名、分布
- "pie":饼图,适用于占比、比例、构成
- "":不适合生成图表
【图表决策规则】
第一步:优先判断用户意图
- 用户问题中包含“趋势、变化、走势、每天、每日、每月、每年、历史、近7天、近30天、按时间”这类表达,优先考虑 "line"
- 用户问题中包含“对比、排名、各个、各类、哪个多、哪个少、分布、Top、TOP”这类表达,优先考虑 "bar"
- 用户问题中包含“占比、比例、构成、份额”这类表达,优先考虑 "pie"
第二步:结合数据结构校验
只有同时满足以下条件,才允许生成图表:
- 查询结果至少包含 2 条数据
- 能明确识别 1 个分类字段
- 能明确识别 1 个数值字段
- 分类字段和数值字段一一对应
第三步:禁止生成图表的情况
遇到以下任一情况,必须返回空图表:
- 只有 1 条数据
- 没有数值字段
- 没有分类字段
- 数据无法形成趋势、对比或占比
- 查询结果为空
- 数据明显不完整,无法保证 classify 和 data 数量一致
【字段选择规则】
- classify:优先选择时间字段或分类名称字段,例如日期、月份、商品名、地区名、类别名
- data:优先选择可用于统计分析的数值字段,例如销售额、订单量、数量、人数、金额、总数
- 如果存在多个候选字段,选择最符合用户问题意图的那一组
- classify 和 data 必须来源于同一批记录,且顺序一致
【标题生成规则】
根据用户问题生成简洁自然的标题:
- 趋势类:如“近7天订单趋势”“每月销售额变化趋势”
- 对比类:如“各商品销量对比”“各地区销售额对比”
- 占比类:如“商品销售占比分析”“各类别订单占比”
- 如果不适合画图,title 返回空字符串 ""
【输出格式要求】
你必须只输出一个标准 JSON 对象,格式如下:
{
"output_type": "",
"title": "",
"data": "",
"classify": ""
}
【严格约束】
- 所有字段的值都必须是字符串
- output_type 只能是 "line"、"bar"、"pie"、""
- data 和 classify 必须使用英文分号 ";" 连接
- data 与 classify 的数量必须严格一致
- 不允许输出 markdown 代码块
- 不允许输出 ```json
- 不允许输出解释说明
- 不允许输出多余字段
- 不允许换成数组格式
- 必须直接输出可被 JSON 解析器解析的纯 JSON 字符串
【输出示例1】
{
"output_type": "line",
"title": "每月销售额变化趋势",
"data": "39233.95;94571.08;185902.5",
"classify": "2026-04;2026-03;2026-02"
}
【输出示例2】
{
"output_type": "",
"title": "",
"data": "",
"classify": ""
}
现在请严格根据【用户提问】和【数据库查询结果】输出结果,不要输出任何额外内容。
用户提示词:
用户问题:
{{#sys.query#}}
数据库查询结果:
{{#17752206371160.text#}}
2、Json处理工具-分别读取图表信息
我们分别获取:图表类型,图表标题,图表数据,图表横坐标或类别。

获取图表字段
分别用json解析器获取上一步解析的字段。

我们并行获取四个字段。
3、分支判断绘制不同的图表

条件分支节点
根据图表的类型,绘制不同的图,我们设置条件分支节点。

4、Echarts图-绘制图表节点




分别根据前面解析的内容,填入绘制图。
5、代码节点-整合图输出
可以通过以下节点,进行整合图输出。

输入变量,分别为:
output_type:输出图的类型
line_text: 线形图输出的内容
bar_text:柱状图输出的内容
pie_text:饼图输出的内容
python代码如下:
def main(output_type: str, line_text:str, bar_text:str, pie_text:str):
result_text = "输出图表为:\n"
if output_type == "line":
result_text += line_text
elif output_type == "bar":
result_text += bar_text
elif output_type == "pie":
result_text += pie_text
else:
result_text = ""
return {
"result": result_text
}
6、数据分析回复

设置数据分析回复。

五 进行预览测试
如下图,进行预览测试。

六 总结
本节在数据分析基础上,增加了图表能力,让系统从“能查数据”升级为“能直观展示数据”。核心流程:让AI不仅能分析数据,还能自动用图表表达数据。