Day 12 · 可视化 + AI:让 AI 帮你选图表

📅 2026/8/13 1:27:39
Day 12 · 可视化 + AI:让 AI 帮你选图表
「AI Python 系列」第 01 栏 · AI 时代的 Python 办公自动化全栏 18 篇 · 零成本跟完 品牌梅雅达编程笔记摘要数据有了画什么图柱状图、折线图还是饼图本篇让AI根据数据特征自动推荐图表类型再用·matplotlib·一键生成。三种实战场景产品销量对比推荐柱状图、月度趋势推荐折线图、渠道占比推荐饼图。传统做法靠人判断选图AI做法数据进图表出。开篇 · 数据可视化的真实痛点你有没有遇到过这些场景场景传统做法痛点产品销量对比想用柱状图 → 写matplotlib代码 → 调样式图画出来不好看调了半天月度趋势想用折线图 → 加标记点 → 填充颜色代码写了一堆效果一般渠道占比想用饼图 → 算百分比 → 调颜色到底用饼图还是环形图纠结图表选择凭感觉选选错了图表类型数据传达效率低核心矛盾画图工具都会用但不知道什么数据该画什么图。今天让 AI 帮你做这个决策——把数据和描述丢给 AI它推荐最合适的图表类型再用matplotlib自动生成。一、传统做法 vs AI 时代做法传统做法手写matplotlibimportmatplotlib.pyplotasplt# 手动选图表类型products[基础版,进阶版,爬虫包,脚本库,手册]sales[150,80,60,45,200]plt.bar(products,sales)plt.title(产品销量对比)plt.savefig(chart.png)能力边界✅ 能画各种图表❌ 选什么图全靠人判断❌ 样式要手动调配色要自己搭❌ 数据一变图要重画AI 时代做法AI 选图 自动生成# 你只管描述数据ai_visualize(dataproducts,labelsproducts,valuessales,description5款产品的销量对比)# AI 自动完成# 1. 分析数据特征 → 推荐柱状图# 2. 生成图表 → 保存 PNG组合优势AI 负责决策什么数据画什么图标题叫什么坐标轴写什么matplotlib负责画图按 AI 的推荐生成高质量图表你只需要提供数据二、数据准备本篇用三组内置数据覆盖三种最常见的可视化场景场景1产品销量对比 ├── 5款产品 × 销量数字 ├── 适合柱状图对比不同类别的数量 └── AI 推荐预期bar 场景2月度销售额趋势 ├── 7个月 × 销售额数字 ├── 适合折线图展示时间趋势变化 └── AI 推荐预期line 场景3销售渠道占比 ├── 5个渠道 × 份额百分比 ├── 适合饼图展示占比构成 └── AI 推荐预期pie三、精简版代码 ai_chart_v2.py - AI 选图表 自动可视化精简版 importos,sys,json sys.path.insert(0,os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))fromllm_clientimportLLMClientimportmatplotlib matplotlib.use(Agg)importmatplotlib.pyplotaspltimportmatplotlib.font_managerasfmdefsetup_chinese_font():forfontin[SimHei,Microsoft YaHei,PingFang SC,WenQuanYi Micro Hei]:iffontin{f.nameforfinfm.fontManager.ttflist}:plt.rcParams[font.sans-serif][font]breakplt.rcParams[axes.unicode_minus]Falsesetup_chinese_font()COLORS[#4A90D9,#FF6B6B,#FFD93D,#6BCB77,#4D96FF,#FF9F43,#A55EEA,#26DE81]defrecommend_chart(description,data_sample):clientLLMClient(providerglm)system_prompt你是数据分析专家。根据数据描述和样本推荐最合适的图表类型。 输出JSON{chart_type:bar/line/pie/horizontal_bar,title:标题,reason:理由,x_label:X轴,y_label:Y轴} 类型说明bar柱状图对比数量line折线图展示趋势pie饼图展示占比horizontal_bar横向柱状图适合长标签promptf数据描述{description}\n数据样本\n{data_sample}\n请推荐图表类型。returnjson.loads(client.chat_json(prompt,system_promptsystem_prompt,temperature0.3))defcreate_chart(chart_type,labels,values,title,x_label,y_label,output_path):fig,axplt.subplots(figsize(10,6))ifchart_typebar:barsax.bar(labels,values,colorCOLORS[:len(labels)])forbar,valinzip(bars,values):ax.text(bar.get_x()bar.get_width()/2,bar.get_height()max(values)*0.01,f{val:,.0f},hacenter,vabottom,fontsize10)ax.set_xlabel(x_label);ax.set_ylabel(y_label)plt.xticks(rotation30,haright)elifchart_typeline:ax.plot(range(len(labels)),values,markero,linewidth2,color#4A90D9,markersize6,markerfacecolor#FF6B6B,markeredgecolor#FF6B6B)ax.fill_between(range(len(labels)),values,alpha0.15,color#4A90D9)fori,valinenumerate(values):ax.text(i,valmax(values)*0.02,f{val:,.0f},hacenter,fontsize9)ax.set_xticks(range(len(labels)));ax.set_xticklabels(labels)ax.set_xlabel(x_label);ax.set_ylabel(y_label)ax.grid(axisy,alpha0.3)elifchart_typepie:ax.pie(values,labelslabels,autopct%1.1f%%,colorsCOLORS[:len(labels)],startangle90,textprops{fontsize:10})elifchart_typehorizontal_bar:ax.barh(labels,values,colorCOLORS[:len(labels)])fori,valinenumerate(values):ax.text(valmax(values)*0.01,i,f{val:,.0f},vacenter,fontsize10)ax.set_xlabel(x_label)ax.set_title(title,fontsize14,fontweightbold)ax.spines[top].set_visible(False);ax.spines[right].set_visible(False)plt.tight_layout();plt.savefig(output_path,dpi150,bbox_inchestight);plt.close()returnoutput_pathdefai_visualize(labels,values,description,output_dir.):data_sample\n.join(f{l}:{v}forl,vinzip(labels[:5],values[:5]))print(f\n 数据描述{description})print(f 数据样本)forlineindata_sample.split(\n):print(f{line})print(f AI 正在分析数据...)recrecommend_chart(description,data_sample)print(f ✅ 推荐{rec[chart_type]}-{rec[title]}| 理由{rec[reason]})output_pathos.path.join(output_dir,fchart_{rec[chart_type]}.png)create_chart(rec[chart_type],labels,values,rec[title],rec.get(x_label,),rec.get(y_label,),output_path)print(f ️ 图表已保存{output_path})returnoutput_pathdefmain():print(*60)print( AI 选图表 自动可视化精简版)print(*60)output_diros.path.join(os.path.dirname(os.path.abspath(__file__)),charts)os.makedirs(output_dir,exist_okTrue)test_cases[([基础版教程,进阶版教程,爬虫工具包,办公脚本库,提示词手册],[150,80,60,45,200],产品销量对比),([1月,2月,3月,4月,5月,6月,7月],[12000,15000,18000,22000,25000,28000,32000],月度销售额趋势),([官网直销,代理商,电商平台,线下渠道,合作伙伴],[35,25,20,12,8],市场份额占比),]fori,(labels,values,desc)inenumerate(test_cases,1):print(f\n{*60}\n 实战{i}{desc}\n{*60})ai_visualize(labels,values,f梅雅达{desc},output_dir)print(f\n{*60}\n 全部完成图表保存在{output_dir}\n{*60})if__name____main__:main()完整代码评论区留言领取运行方式cdday12_code pipinstall-rrequirements.txt python ai_chart.py预期输出截选 AI 选图表 自动可视化 实战1产品销量对比 数据描述梅雅达5款产品的销量对比 数据样本 基础版教程: 150 进阶版教程: 80 爬虫工具包: 60 办公脚本库: 45 提示词手册: 200 AI 正在分析数据推荐图表类型... ✅ 推荐bar - 梅雅达各产品销量对比 理由5款产品的销量是不同类别的数量对比柱状图最直观 ️ 图表已保存charts/chart_bar.png 实战2月度销售额趋势 ✅ 推荐line - 2024年1-7月销售额趋势 理由7个月的时间序列数据折线图最能展示增长趋势 ️ 图表已保存charts/chart_line.png 实战3市场份额占比 ✅ 推荐pie - 梅雅达销售渠道市场份额 理由5个渠道的占比数据饼图最适合展示构成比例 ️ 图表已保存charts/chart_pie.png运行后在day12_code/charts/目录下会生成三张 PNG 图片。四、代码拆解两步流水线步骤函数AI 的角色传统做法① AI 推荐图表recommend_chart()数据分析师凭经验选图② 生成图表create_*_chart()—手写matplotlib关键设计让 AI 输出结构化推荐system_prompt输出 JSON 格式 { chart_type: bar/line/pie/horizontal_bar, title: 图表标题, reason: 推荐理由, x_label: X轴标签, y_label: Y轴标签 }AI 不仅告诉你用什么图还帮你拟好了标题、坐标轴标签。拿到 JSON 后直接按类型分发到对应的绘图函数。关键设计中文字体自动检测defsetup_chinese_font():chinese_fonts[SimHei,Microsoft YaHei,PingFang SC,WenQuanYi Micro Hei,Noto Sans CJK SC]availableset(f.nameforfinfm.fontManager.ttflist)forfontinchinese_fonts:iffontinavailable:plt.rcParams[font.sans-serif][font]returnfontmatplotlib默认不支持中文直接画会出现方框。这个函数自动检测系统可用的中文字体Windows 找微软雅黑、Mac 找苹方、Linux 找文泉逸。关键设计配色方案统一colors[#4A90D9,#FF6B6B,#FFD93D,#6BCB77,#4D96FF]预设了 8 色配色方案蓝-红-黄-绿-蓝交替避免了matplotlib默认配色的土味感。所有图表类型共用同一套配色视觉风格统一。 本篇成本透明栏项目数值API 调用次数3 次3组数据各调 1 次推荐消耗 Token约 3,500 tokens成本¥0GLM-4.7-Flash 永久免费免费额度是否够✅ 够用商用估算¥0GLM/ 约¥0.01DeepSeek/ 约¥0.01Qwen生成10张图表预估约 1 分钟成本 ¥0练手改造题改造 1基础加一个散点图scatter的支持——当数据是两个数值变量的关系时如广告投入和销售额AI 应推荐散点图。提示在recommend_chart()的system_prompt中加scatter: 散点图适合展示两个变量的关系再加一个create_scatter_chart()函数。改造 2进阶改造ai_visualize()支持从 CSV 文件读取数据——传入 CSV 文件路径自动解析列名和数据然后走 AI 推荐流程。提示用csv模块读取labels 第一列values 第二列description 文件名。改造 3挑战加一个图表风格切换功能——支持style商务/style活泼/style简约三种预设风格不同风格用不同的配色方案和字体大小。提示定义STYLES字典每个风格对应一组colors和fontsize参数在create_*_chart()中传入。下期预告Day 13 · AI 爬虫浅版LLM 提取结构化数据数据可视化和数据库查询都搞定了接下来换个方向——网页数据。用 AI 从网页中提取结构化信息产品价格、文章作者、企业联系方式一键变 JSON。内置示例页面无需联网即可跟练。 资源与工具文末合规集中matplotlib 官方文档https://matplotlib.org/stable/contents.htmlmatplotlib 中文字体设置https://matplotlib.org/stable/api/font_manager_api.html智谱开放平台GLM免费 API Keyhttps://open.bigmodel.cn/GLM 模型文档https://docs.bigmodel.cn/本专栏配套代码CSDN 下载区每篇更新 作者的话梅雅达编程笔记专注 Python AI 办公自动化实战教程。数据可视化的核心不是会画图而是会选图。同一组数据用不同图表表达效果天差地别。让 AI 帮你做这个选择不是为了替代你的判断而是给你一个起点——AI 推荐 人工微调比从零开始高效得多。往期回顾Day 01 · 为什么 2026 年办公自动化得“AI 化“了Day 02 · 环境搭建一套装备打天下Day 03 · Prompt 工程 5 大心法Day 04 · LLM API 横评 已被AI编程社区收录Day 05 · 让 AI 输出结构化数据告别“偶尔给你一段散文“Day 06 · Excel AI让电子表格变“聪明“Day 07 · Word AI自动生成文档Day 08 · PDF 智能提取让 AI 读懂合同、发票、简历Day 09 · PPT 自动生成文字大纲变演示文稿Day 10 · 邮件 AI智能分类与自动回复Day 11 · 自然语言查数据库NL2SQL专栏推荐「AI Python 系列」第 01 栏 · AI办公自动化连载中「AI Python 系列」第 02 栏 · AI数据可视化连载中「AI Python 系列」第 03 栏 · Python 爬虫实战连载中资源领取关注作者获取本栏完整代码和数据集原创声明本文为梅雅达编程笔记原创作品未经允许不得转载。