资讯动态

用自然语言生成图表:DeepSeek+ECharts/Mermaid/Python实战

发布时间:2026/10/18 17:36:07 来源:尧图企业网站定制
做数据分析这几年我发现自己花在“把数据画成图”上的时间远比分析本身要多。尤其当需求方只给一句“帮我看看这个月各区域的销售趋势”你还得迁就手头的工具去调坐标轴、改颜色、试模板。后来我开始用DeepSeek这类大模型配合 ECharts、Mermaid、Python 直接以自然语言生成图表三分钟内从一段描述到一张能看的图表基本成了日常操作。这篇文章我就把这套玩法完整拆给你看包含提示词写法、三种技术路线选型、完整样例代码以及我踩过的那些坑。这套方案适合谁主要是经常做数据汇报的运营、产品、开发以及一切需要快速出图但又不想花大量时间学前端图表库或Python绘图库的同学。不需要你记一堆API只需要能说清楚“我想看什么、数据大概什么样”剩下的事情交给模型你负责挑毛病和微调。1. 为什么用自然语言生成图表思路与方案选型1.1 传统图表制作方式的效率瓶颈先说个现实问题。常见的图表产出路径大概有四种Excel手动插入、Python写脚本、前端图表库调用、在线图表工具拖拽。但它们都有一个共同特点你得先学会“工具的语言”才能表达“你的需求”。Excel虽然上手快但复杂图表的重型格式化非常繁琐一个坐标轴标题就能让人翻好几层菜单。Python的 matplotlib、pyecharts 功能强大但你没点编程基础光是把DataFrame转成列表再塞进绘图函数就容易卡半天。前端图表库更不用说ECharts 的配置项文档几十万字很多人查了半天最后还是百度一段现成配置改改。在线工具倒是省事但数据格式限制多、样式模板同质化严重想在图形里加一些自定义注释或业务说明基本做不到。这些工具本质上都是“结构化指令驱动”你必须告诉工具每一个细节——轴、刻度、图例、颜色、数据点。人脑其实是“意图驱动”的更习惯说一句“我要看三月到五月的环比增长趋势把周末用灰色背景标出来”。传统工具需要你把这个意图翻译成几十行配置代码而自然语言生成图表要做的就是把这句话直接给到 DeepSeek让它帮你完成翻译。1.2 DeepSeek 生成图表的本质意图到代码的翻译器理解了这一点你就会明白DeepSeek 并不神秘。它做的事情本质上是一个“意图翻译器”输入自然语言描述和原始数据输出对应图表库的代码或声明式文本。以 ECharts 为例模型输出的会是一段完整的 JavaScript 配置包含 xAxis、yAxis、series、tooltip 等字段。你拿到代码后丢进 HTML 页面或者直接放进一些支持 ECharts 的编辑器中就能看到渲染结果。Mermaid 那条线更轻量模型生成的是一段 mermaid 语法文本比如 graph TD、sequenceDiagram、gantt 这些关键字开头的块渲染交给支持工具。Python 路线则比较适合需要清洗数据、计算统计量、再绘图的场景模型会生成一个完整脚本。这个“翻译”能力的关键在于提示词。如果你只说“生成销售额图表”模型大概率会给你一个泛泛的、没有数据的框架代码。但如果你把“期望的图表类型、数据字段、时间范围、视觉要求”用自然的语言描述清楚模型就能生成高度匹配的代码。1.3 三条技术路线的分工逻辑不是二选一很多人在接触自然语言生成图表时容易陷入“到底学哪种”的纠结。我的建议是看场景选路线而不是看哪个“更强”。ECharts适合需要交互、联动、钻取、高定制化的前端图表。比如你在做一个数据看板系统希望鼠标悬浮显示明细、点击跳转、地图下钻ECharts 是首选。Mermaid适合结构类图表——流程图、时序图、甘特图、状态图、思维导图。它不擅长统计图表折线、柱状、饼图但非常适合画业务流程和架构图而且零依赖、文本即图表可以直接嵌入 Markdown 文档。Python适合数据处理比较重的场景——聚合、清洗、筛选、透视之后画出生理图或出版级图表。如果数据文件有几万行Excel 撑不住我更推荐用 Python 路线。这三条路线并不是互斥的。我现在的工作流经常是先用 DeepSeek 生成 Python 代码处理数据再用 ECharts 渲染结果或者把 ECharts 的交互框架搭好让模型只生成 series 部分。后面的实战环节我会把每条路线的完整流程拆开讲。2. 让AI生成图表的前提提示词工程要点2.1 图表提示词的标准结构自然语言生成图表的效果好不好八成取决于提示词。模型再强面对“帮我做个图”这种需求也只能靠猜。在实操中我总结了一个四段式提示词结构简单说就是“角色-数据-图表-风格”四个维度缺一不可。角色让模型以某个专业身份来回答问题。比如“你是一名资深前端工程师熟悉 ECharts 配置”这能明显提升代码的规范性。数据给模型明确可用的数据。可以是一段 CSV 文本、Excel 粘贴的表格也可以是模拟数据的生成规则。数据维度包括字段名、时间粒度、单位、范围。图表明确图表类型和业务诉求。是折线图还是柱状图比较的是趋势还是分布是否需要堆叠、是否要显示数值风格定义视觉要求。配色、字体大小、坐标轴格式化、图例位置、背景色等。风格描述得越细出来越接近“高颜值”。举一个我经常用的模板示例你是一名资深前端工程师精通 ECharts 配置。请根据以下需求生成完整可运行的 ECharts 配置代码只输出 JavaScript 对象不要额外说明。 数据场景某电商平台近7天4月1日到4月7日的每日订单量和成交金额。 日期04-01, 04-02, 04-03, 04-04, 04-05, 04-06, 04-07 订单量320, 450, 610, 580, 720, 890, 1050 成交金额万元2.4, 3.1, 4.5, 4.2, 5.8, 7.2, 8.9 图表要求使用双Y轴折线图左侧Y轴显示订单量右侧Y轴显示成交金额颜色采用深蓝和橙色线条平滑展示数据标签图例在顶部整体风格简约现代。这个提示词里既包含了完整数据又限定了图表的规格模型的输出质量会非常稳定。2.2 让AI帮你“造数”的进阶用法建了一个带注释替换数据的模板这样就能批量生产同一类型的图表。模拟数据本身也可能有讲究模型的训练数据里有大量现实统计特征的记忆你只要给出业务领域和大致量级它能生成看起来很像样的数据适合做原型汇报、不涉敏的演示场景。比如你想做一个“按城市对比的销售目标完成率”横向条形图却没有实在数据可以明确告诉 DeepSeek请生成一组模拟数据8个中心城市目标销售额1000万到5000万不等实际销售额控制在目标值的80%到120%之间。数据以表格形式输出包含城市、目标、实际、完成率四列。然后在下一轮对话中把生成的表格丢给模型再提图表要求。两轮对话完成一个完整的雏稿这是很多演示方案的快速产出方式。2.3 提示词中的风格控制清单关于“高颜值”不同人理解不太一样。为了不让模型输出默认的蓝底白字老样式我一般在提示词里加上明确的风格关键词。这几个方向可以组合使用技术感深色背景、霓虹蓝绿渐变、细字体、透明玻璃拟态商务感白色背景、低饱和色系、圆角边框、克制的标题字体数据可视化最佳实践减少网格线、使用色盲友好配色、强调数据标签、弱化坐标轴线我实际用的描述示例“使用浅灰背景主色为#1677FF辅色为#ff6b6b柱状图圆角为8Y轴数值格式化为千分位图例放右上角整体采用类似苹果官网的简洁留白风格。”模型通常能根据这些描述生成相对接近的样式。就算第一版不满意也可以把它生成的代码贴回去说“把配色换成莫兰迪色系”改进速度比手工改代码快得多。3. 实战DeepSeek ECharts 生成交互图表3.1 场景1从一段文本生成销售趋势双轴图先看一个最简单的实战。假设你手头只有一段描述性的数据文本目标是生成一张带双Y轴的销售趋势图。把数据喂给模型后提示词里写上“生成 ECharts 完整配置双Y轴左侧为销售额右侧为订单量使用平滑曲线”。模型输出的大致代码结构如下这是经过我用真实环境验证过的简化版本option { backgroundColor: #f8f9fb, tooltip: { trigger: axis }, legend: { top: 16, data: [销售额, 订单量] }, grid: { left: 10%, right: 10%, top: 18%, bottom: 12% }, xAxis: { type: category, data: [04-01, 04-02, 04-03, 04-04, 04-05, 04-06, 04-07] }, yAxis: [ { type: value, name: 销售额万元, axisLabel: { formatter: {value}万 } }, { type: value, name: 订单量, splitLine: { show: false } } ], series: [ { name: 销售额, type: line, smooth: true, data: [2.4, 3.1, 4.5, 4.2, 5.8, 7.2, 8.9], lineStyle: { width: 3 }, symbolSize: 6 }, { name: 订单量, type: line, yAxisIndex: 1, smooth: true, data: [320, 450, 610, 580, 720, 890, 1050], lineStyle: { width: 3 } } ] };把这段代码放到任意支持 ECharts 的页面里即可渲染。注意这个 option 对象是纯配置需要包在init和setOption中才能运行。完整的 HTML 骨架你也可以让模型直接生成提示词里增加一句“请输出包含完整 HTML 页面的代码使用 CDN 引入 echarts.min.js”。3.2 场景2多系列柱状图与堆叠模式如果业务需要比较多个维度的数据比如三个区域的月度销售额柱状图比折线图更合适。在提示词中我一般会明确“使用堆叠柱状图还是分组柱状图”这两个概念容易被模型混淆。分组柱状图适合比较各区域的绝对值堆叠柱状图适合看总量和内部构成。下面是一个生成分组柱状图的示例提示词生成分组柱状图横轴为1月到6月系列为华东、华南、华北三个区域销售额单位万元。数据如下 1月华东350华南280华北210 2月华东390华南300华北240 3月华东420华南340华北260 4月华东380华南320华北230 5月华东460华南380华北290 6月华东510华南430华北320 要求分组显示柱间距离合理每个柱子上方显示数值三个系列配色使用蓝、青、橙三种颜色图例放顶部居中。模型生成的主要区别点在 series 部分series: [ { name: 华东, type: bar, data: [350, 390, 420, 380, 460, 510], itemStyle: { color: #1677FF, borderRadius: [4, 4, 0, 0] } }, { name: 华南, type: bar, data: [280, 300, 340, 320, 380, 430], itemStyle: { color: #36CFC9, borderRadius: [4, 4, 0, 0] } }, { name: 华北, type: bar, data: [210, 240, 260, 230, 290, 320], itemStyle: { color: #FFA940, borderRadius: [4, 4, 0, 0] } } ]这里有个小技巧如果把barWidth设为固定值整个图会显得更精致默认自动宽度在系列多的时候容易挤在一起。这个参数可以直接加在提示词里比如“barWidth 设置为 18”。3.3 把 ECharts 代码接入网页的注意事项模型生成的 ECharts 配置虽然能跑但接入真实项目时有一些实际经验需要提前了解。不要把 CDN 和配置输出混在一个请求里训练出来的模型有时会在配置中夹带 CDN 脚本或者把配置写成 ES Module 格式不经过浏览器环境跑不动。要求“只输出纯 option 对象”通常最稳。适配容器尺寸ECharts 的图表容器需要明确高度常见错误是容器宽度为0导致图表显示不出来。如果嵌入的是后台管理系统建议给容器一个固定高度比如height: 500px。异步数据更新如果你的图表数据是动态变化的不要整页刷新用myChart.setOption({...}, true)做局部更新。提示词里可以写“请将数据抽离为变量方便后续替换”模型通常会把 data 字段和配置拆开这对后续维护非常友好。JSON 解析校验从模型输出到代码运行之间我建议先做一次“配置入空”检查。把 model 返回的代码复制到一个临时的 JS 编辑器里用JSON.stringify(option)看看能否正常解析能快速定位漏写逗号、单引号混用之类的问题。4. 实战DeepSeek Mermaid 生成流程与时间线图表4.1 Mermaid 的适用范围与挑选标准Mermaid 与 ECharts 的最大不同在于它生成的不是编程代码而是一种声明式的绘图语法。你不需要配置对象只需要写graph TD、sequenceDiagram这样的段落渲染器就会自动画出一个图。同样它天然适合嵌入笔记、Markdown 文档、Wiki 系统。DeepSeek 对 Mermaid 语法的掌握相当不错反过来做“把流程图反推成文本描述”也表现优秀。但它也有边界。Mermaid 对复杂统计图表的支持几乎为零别指望用它画折线图和热力图。同时它不支持任意布局节点位置是由布局引擎决定的复杂的组织架构图容易乱。所以在自然语言生成图表时我先判断“是逻辑关系图还是数据图”逻辑图走 Mermaid数据图走 ECharts 或 Python。4.2 从需求描述到流程图代码一个实际场景某公司线上故障处理流程你希望在文档里快速绘制一张流程图。之前用画图工具拖拽至少一刻钟现在只需要一段提示词请用 Mermaid 语法生成一个故障处理流程图 开始 - 客户上报异常 - 客服初步分类 如果是网络问题转网络工程师排查 如果是应用问题转开发团队排查 排查后都进入结果反馈环节 - 反馈给客户 - 结束 网络问题有恢复验证步骤如果不通过回到网络工程师重新排查。 请使用 graph TD 方向节点文字简洁。模型生成的 Mermaid 代码大致如下graph TD A[客户上报异常] -- B{客服初步分类} B --|网络问题| C[网络工程师排查] B --|应用问题| D[开发团队排查] C -- E{恢复验证} E --|不通过| C E --|通过| F[结果反馈] D -- F F -- G[反馈给客户] G -- H[结束]实际使用中你会发现Mermaid 的优势不仅在于生成快还在于可以直接版本化管理。同事要修改流程中的某一步几秒钟改一行文本就行不用重新画图。DeepSeek 还能帮你做流程图“体检”比如缺失开始节点、分支条件不完整提示词里加一句“请检查逻辑是否闭环”能明显减少后续返工。4.3 甘特图与时间线图的生成示例除了流程图Mermaid 在项目排期领域也很常用。甘特图语法风格比较特殊手动敲日期代码很容易出错但 DeepSeek 几乎没有这个问题只要把任务清单写清楚输出基本可用。一个比较实用的提示词例子请生成一个 Mermaid 甘特图展示模拟项目X的4周开发排期 第1周需求评审3天、技术方案设计2天 第2周数据模型设计2天、接口开发3天 第3周前端页面开发3天、联调测试2天 第4周回归测试2天、发布上线1天 使用 gantt 语法日期从2025年4月7日开始按工作日推进。模型输出的甘特图代码注意点有几个dateFormat要统一任务之间的依赖关系要写在after或直接用 section 分组。如果你希望任务条显示负责人可以在任务描述后用冒号追加比如需求评审 :a1, 2025-04-07, 3d。还有一个很常用的是时间线图即 timeline 语法适合路线图、里程碑展示。例如一个产品发布的里程碑节点你只需要按时间列举模型会生成类似这样的文本timeline title 产品迭代路线图 Q1 : 需求调研 : 原型评审 Q2 : 开发实现 : 内测 Q3 : 公测 : 数据观测 Q4 : 正式发布这种图表用在总结汇报里视觉冲击力比纯文字列表强得多而且因为它是文本形式可以随便嵌套进各种文档。5. 实战DeepSeek Python 生成出版级数据图表5.1 从对话表格到 Python 绘图代码的完整链路遇到原始数据量较大或需要做统计处理的场景我习惯把 DeepSeek 当数据处理助手。比如我们拿到了一份 CSV 销售记录总共几千行列包括订单日期、渠道、品类、金额。需要按周聚合出各渠道的销量走势。手工在 Excel 里做透视表也行但后续想生产一张可定制性高的图写 Python 代码是更稳妥的路径。这时提示词的思路与 ECharts 略有不同。第一步先让模型生成数据处理代码第二步再生成绘图代码两步可以一条提示词完成。关键是要把小样数据结构说明清楚。以下是一个可运行的模拟流程我有一段销售数据字段为 order_date、channel、category、amount共约5000行。请生成 Python 代码完成以下任务 1. 读取 sales.csv 文件 2. 将 order_date 转为日期类型增加一列“周”表示该日期所在的周周一为一周开始 3. 按周和 channel 分组计算 amount 的合计 4. 使用 matplotlib 绘制分组折线图X轴为周数Y轴为销售额三条折线分别对应三个渠道 5. 图面要求中文字体设置图表标题“各渠道周销售额趋势”图例在右上角网格淡化模型通常能输出一个接近完整的脚本。但有一个坑matplotlib 默认不显示中文提示词里如果没有明确写字体配置你大概率会看到一堆方块。所以我自己会在代码要求里加一句“使用 plt.rcParams 设置中文字体为 SimHei 或微软雅黑并设置 axes.unicode_minus 为 False”。5.2 pyecharts 与 matplotlib哪个更适合生成图表Python 路线里我常用的两个库是 matplotlib 和 pyecharts两个定位差别明显。matplotlib 胜在灵活和出版质量。你几乎可以控制图上的每一个像素适合论文插图、数据分析报告里的静态图。它的缺点是代码冗长且默认样式难看——但这恰好是自然语言生成的优势DeepSeek 能直接帮你写出配色、调整网格、设置标注的一整套代码让你跳过“从默认丑图到美观”的痛苦过程。pyecharts 则为 Python 生态引入了 ECharts 的交互能力。你可以在 Jupyter Notebook 里直接渲染出支持悬浮提示、下钻、缩放等交互特性的图表还是用 Python 处理数据、用 ECharts 呈现两全其美。DeepSeek 对 pyecharts 的语法掌握程度也不错但要注意版本差异。pyecharts1.x 和 0.5.x 的 API 差别不小提示词里最好明确“使用 pyecharts 1.x 版本语法”。下面是一个 pyecharts 生成柱状图的简化参考from pyecharts.charts import Bar from pyecharts import options as opts bar ( Bar() .add_xaxis([Q1, Q2, Q3, Q4]) .add_yaxis(华东, [356, 492, 781, 920]) .add_yaxis(华南, [220, 334, 569, 700]) .set_global_opts( title_optsopts.TitleOpts(title季度销售对比), tooltip_optsopts.TooltipOpts(triggeraxis), ) ) bar.render(quarter_sales.html)5.3 数据清洗与参数微调的经验心得用自然语言生成 Python 代码容易出现一个现象代码能跑但数据结果跟你的预期对不上。我出现过两次印象很深的误操作。一次是星期分组没有按周一对齐导致周标签错位还有一次是金额字段读入后是字符串格式直接求和把字符串拼接了。现在我都会在提示词里强制加一句“数据清洗时请检查数据类型amount 转换为 floatorder_date 使用 pandas.to_datetime并在处理前断言数据量大于0”。图表参数微调也有套路。比如想让生成的折线图更“高级”可以直接告诉模型关掉上边框和右边框、只保留X轴刻度线等。写“使用 seaborn 风格或直接修改 rcParams”后模型会输出一段细化配置比手动敲准得多。6. 高频问题与排查技巧实录6.1 输出被截断导致图表无法渲染目前大模型平台的输出长度通常有上限。在生成 ECharts 完整配置、或用 pyecharts 生成多系列复杂图时代码容易在字符数限制边缘左右横跳。最常见的结果是代码被截断在 series 中间导致语法错误。我的处理策略是分步生成。提示词里明确“先生成 option 的前半部分总体结构和坐标轴再生成 series 部分”。或者更简单让模型尽量精简代码有些不太重要的配置可以省略。比如 ECharts 的 backgroundColor 可以直接默认具体样式以后再说。如果已经出现截断把已生成的代码尾部加上“继续从刚才截断的位置接着生成”模型可以基于上下文补齐可用率很高。注意补齐后要检查提供的字段是否重复定义重复的字段有时会覆盖前面的配置。6.2 JSON 解析失败与代码中夹杂说明文字使用 ECharts 时常见问题是模型返回的内容里混入了解释文字比如“以下是配置代码”。如果你直接把整个响应作为 JSON 解析必报错。解决方法是提示词里加“只输出代码不要任何解释文字”输出前先把响应内容里前后缀说明文字人工清理一下。在生成 Python 代码时也可以用类似方法“只输出 Python 代码不要 markdown 代码块标记以外的内容”。不过我的实际体验是直接用 markdown 代码块包住 良好的注释反而更好用。6.3 数据脱敏与真实数据的安全边界这条我特别想提醒。用 DeepSeek 这类在线模型生成图表数据安全是绕不开的话题。尽量不要把真实客户明细、员工薪资等敏感信息直接粘贴进提示词。比较稳妥的做法是把字段名改成不太敏感的简称数据值做脱敏或模糊化处理跑通流程后再把真实数据替换进生成的代码。如果业务场景对数据安全要求极高建议部署本地运行的模型或者使用私有化方案目前主流推理服务基本也都有私有化部署选项只是对硬件有一定要求。6.4 渲染效果不符合预期的调整技巧自然语言生成图表第一版很少能完全让人满意。“一键出图适配所有审美”这个诉求目前还不太现实。好在调整的效率远超手工。你不需要了解底层API只需要用大白话说感受。“颜色太土了换成莫兰迪色”“信息不够突出把数值最大的柱状用红色标出”“网格线去掉背景改成浅灰”“图例放到图表左下角”把这些描述回传给模型它会在上一轮生成的代码基础上修正。我发现这种“对话式改图”的效率比在 IDE 里手工调样式高几倍。一个小技巧是每次修改时只给一个具体诉求别一次提太多否则模型对待改代码的把握反而会降低。修改后优先检查修改项相关的代码字段确认它没有因为删掉某条配置而影响其他配置项。最后说点我的体会这套流程跑顺以后我做图表的速度确实发生了质变。以前半天才能完成的周报图表现在上午几轮对话基本搞定剩下的时间全用来检查数据口径和优化表达逻辑。我个人比较推荐的组合是ECharts 管交互看板Mermaid 管文档里的流程与排期图Python 管重数据处理和静态高保真输出。前期的提示词值得多花点时间打磨同一个需求描述更清晰的提示词生成的代码质量差距非常大。最后再提醒一句无论模型生成的速度多快数据正确性依然需要人工核验毕竟图表错了分析结论也跟着错。图表生成只是一个起点真正有价值的是你对数据趋势的判断和洞察这一点别让效率工具替你偷懒。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑