Skip to content

Latest commit

 

History

58 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DataVizAiAssistant

AI驱动的数据可视化助手 — 基于大语言模型的智能图表生成工具,让数据可视化变得触手可及。无需编程基础,只需用自然语言描述您的数据和分析需求,即可自动生成专业的 Matplotlib 可视化图表。支持线图、散点图、条形图等7种图表类型,并具备交互式修改、思考模式、多平台 API 兼容等高级功能,是数据分析、报告生成、学术研究的得力助手。同时提供 CLI Skill,可集成到 OpenClaw、QwenPaw、Claude Code 等 AI 编程助手中使用。

MIT License Python FastAPI React OpenAI Matplotlib

中文 | English


📖 项目简介

DataVizAiAssistant 是一个创新的开源工具,结合人工智能技术与数据可视化功能,帮助用户轻松从自然语言描述生成专业的数据可视化图表。项目使用大语言模型(通过 OpenAI 或兼容接口)解析用户需求,自动生成 Matplotlib 可视化图表,并支持对数据和样式的二次修改。

项目采用前后端分离架构:

模块 技术 说明
frontend/ React + Vite Web 界面(中文,蓝白主题)
backend/ FastAPI HTTP API,提供作图 / 编辑数据 / 编辑样式 三个接口
workflow/ Python 图表生成引擎(多阶段 LLM 流水线 + Matplotlib 渲染)
skills/ Python CLI Skill,可作为 AI 助手插件使用

🚀 在线体验

在线演示http://118.25.26.232:5173/
介绍视频https://www.bilibili.com/video/BV1tqYhzNEbx/


✨ 核心功能

📊 智能图表生成

从自然语言描述自动创建7种专业图表类型,支持线图、散点图、条形图等,自动处理数据提取、图表样式、坐标刻度和标签

🔄 交互式修改

图表实时预览功能,支持数据与样式的二次修改,无需重新生成即可迭代优化

🌐 多平台兼容

支持OpenAI标准API,兼容DeepSeek、Ollama、LmStudio等替代平台,配置文件管理接口切换

🧠 思考模式

强制思考模式(深度推理)与快速执行模式(简化流程)自由切换

🏗️ 前后端分离

React 前端 + FastAPI 后端 + 独立图表引擎,支持局域网访问与端口隔离

🔒 安全可靠

API密钥本地存储,数据不上传第三方服务器,保护用户隐私


🛠️ 技术栈

类别 技术
前端 React 18 + Vite
后端 FastAPI + Uvicorn
图表引擎 Python + Matplotlib
AI SDK OpenAI Python SDK

🧪 本地测试

适合在本机开发或快速体验。

环境要求

  • Python 3.10+
  • Node.js 18+(前端)

1. 克隆项目

git clone https://github.com/AlexisZ12/DataVizAiAssistant.git
cd DataVizAiAssistant

2. 配置 API 密钥

在项目根目录创建 .env

cp .env.example .env

编辑 .env 填入你的 LLM 配置:

API_KEY=your-api-key-here
BASE_URL=https://api.openai.com/v1
MODEL=gpt-4o

也可以不填 .env,在前端「高级设置」里临时输入 API Key / Base URL / 模型。

3. 安装依赖

# Python 依赖(后端 + 图表引擎)
pip install -r backend/requirements.txt

# 前端依赖
cd frontend && npm install && cd ..

4. 启动后端

uvicorn backend.app.main:app --host 127.0.0.1 --port 8000

5. 启动前端

新开一个终端:

cd frontend
npm run dev

6. 访问

浏览器打开 http://localhost:5173,输入需求描述即可生成图表。


🚀 服务器部署

适合把服务部署到局域网或公网服务器,供他人访问。

架构特点:前端对局域网开放,后端只监听本机回环地址。局域网用户通过前端访问服务,但无法直接调用后端 API 端口。

1. 安装依赖(同上)

pip install -r backend/requirements.txt

2. 配置 .env(同上)

3. 安装中文字体(Linux 服务器必需)

服务器默认没有中文字体,图表中的中文会显示为方框。安装后再启动后端:

# Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y fonts-wqy-zenhei

# CentOS/RHEL 8+ / Rocky / Alma
sudo dnf install -y google-noto-sans-cjk-fonts

# 清除 matplotlib 字体缓存,让它重新扫描(缓存路径因系统而异,动态获取)
rm -rf "$(python3 -c 'import matplotlib; print(matplotlib.get_cachedir())')"

程序会自动探测系统中可用的中文字体(文泉驿 / Noto Sans CJK / SimHei / 宋体等),按候选顺序挑第一个可用的,找不到时打印警告提示。

4. 启动后端(绑定本机,不对外暴露)

cd DataVizAiAssistant && setsid nohup uvicorn backend.app.main:app --host 127.0.0.1 --port 8000 > /tmp/dataviz_backend.log 2>&1 < /dev/null &

5. 构建并启动前端

cd DataVizAiAssistant/frontend && npm install && npm run build && setsid nohup npm run preview > /tmp/dataviz_frontend.log 2>&1 < /dev/null &

preview 会把 /api 请求转发给本机 127.0.0.1:8000 的后端。代码更新后需重新 npm run build

6. 放行前端端口(只放 5173,不放后端 8000)

# ufw(Ubuntu/Debian)
sudo ufw allow 5173/tcp

# firewalld(CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=5173/tcp && sudo firewall-cmd --reload

云服务器(阿里云/腾讯云/AWS)还需在安全组里放行 5173。后端 8000 绑的是本机回环地址,无需也不应放行。

7. 验证

# 后端健康检查
curl http://127.0.0.1:8000/api/health      # {"status":"ok"}

# 前端 + 代理
curl http://127.0.0.1:5173/api/health      # {"status":"ok"}

浏览器访问 http://服务器IP:5173。

日志与停止

tail -f /tmp/dataviz_backend.log     # 后端日志
tail -f /tmp/dataviz_frontend.log    # 前端日志

# 停止
pkill -f "uvicorn backend.app.main" 2>/dev/null
pkill -f "vite preview" 2>/dev/null

# 快速按端口停止(8000 后端 / 5173 前端)
kill -9 $(lsof -t -i:8000 -i:5173) 2>/dev/null
# Linux 也可用:fuser -k 8000/tcp 5173/tcp

长期运行建议:用 systemd 将前后端注册成服务,实现开机自启和崩溃自动拉起。


🔌 Skill / CLI 模式

将图表生成能力作为命令行工具或 AI 编程助手 Skill 使用,无 Web UI 依赖,输出为 PNG 文件。

安装

# 1. 安装 Python 依赖
pip install openai matplotlib numpy

# 2. 将技能安装到对应平台

# Claude Code
cp -r skills/dataviz-ai ~/.claude/skills/dataviz-ai

# OpenClaw
cp -r skills/dataviz-ai ~/.openclaw/skills/dataviz-ai

# QwenPaw
cp -r skills/dataviz-ai ~/.copaw/skill_pool/dataviz-ai

安装完成后,在对应平台对话中直接调用 /dataviz-ai 即可使用。

基本用法

方式一:安装为平台技能(推荐)

在对应平台对话中直接使用:

/dataviz-ai "画出2024年各月销售额趋势,1月100,2月200,3月150"
/dataviz-ai "画出上海和北京各季度GDP对比" -o ./chart.png

方式二:直接运行脚本(测试/调试用途)

# 进入脚本目录
cd skills/dataviz-ai/scripts

# 设置环境变量
export DATAVIZ_AI_API_KEY="sk-your-api-key"
export DATAVIZ_AI_BASE_URL="https://api.openai.com/v1"
export DATAVIZ_AI_MODEL="gpt-4o"

# 生成图表
python dataviz_ai.py "画出2024年各月销售额趋势,1月100,2月200,3月150"
# 输出: /tmp/dataviz_xxxxx.png

# 指定输出路径
python dataviz_ai.py "画出上海和北京各季度GDP对比" -o ./chart.png

参数说明

参数 必需 说明
description 位置参数,自然语言描述要生成的图表
-o, --output 输出图片路径,不指定则保存到临时目录

环境变量

变量 必需 说明
DATAVIZ_AI_API_KEY LLM API 密钥
DATAVIZ_AI_BASE_URL API 基础 URL
DATAVIZ_AI_MODEL 模型名称

详见 skills/README.md


🖼️ 支持的图表类型

图表类型 适用场景 预览
线图 时间序列、趋势分析
散点图 相关性分析、分布模式
条形图 分类数据比较
茎叶图 点值分布
填充图 范围可视化
堆叠图 比例构成分析
阶梯图 离散数值变化

🧭 使用示例

示例 1:全球太阳能发电数据

输入描述:

2025年,全球太阳能发电行业经历了快速增长。根据国际可再生能源署(IRENA)的报告,全球五大太阳能发电国的装机容量在过去一年内都有显著增长。以下是这些国家的新增装机容量和占全球市场的比例。
关键数据:
中国:新增装机容量 50 GW,占全球市场的 25%
美国:新增装机容量 30 GW,占全球市场的 15%
印度:新增装机容量 20 GW,占全球市场的 10%
德国:新增装机容量 12 GW,占全球市场的 6%
日本:新增装机容量 8 GW,占全球市场的 4%

生成结果:


示例 2:股票走势分析

输入描述:

From the 1st to the 7th of this month, the stock of TechGen Inc. (TGI) showed some fluctuations. On the 1st, the stock opened at $152.45 and closed at $158.72. The next day, it saw a slight dip, opening at $157.20 and finishing at $155.35. On the 3rd, it bounced back, opening at $156.10 and closing at $160.55. The 4th saw a more significant drop, starting at $159.00 and ending at $152.85. Afterward, the stock demonstrated a steady recovery with an opening price of $153.50 on the 5th, closing at $157.90. On the 6th, it slightly rose again, opening at $158.00 and closing at $161.25. Finally, on the 7th, TechGen Inc. saw its highest price of the week, opening at $162.00 and closing at $163.80, ending the week on a positive note.

生成结果:


🛑 注意事项

  • 需要有效的LLM API密钥(OpenAI或兼容服务)
  • 使用"强制思考"模式,API将消耗更多tokens
  • 图表质量取决于LLM对自然语言的理解准确性
  • 大数据集建议预处理后再输入

🤝 支持与联系

渠道 链接
📂 GitHub AlexisZ12/DataVizAiAssistant
🎁 爱发电 AlexisZ12
📧 邮箱 2242809239@qq.com
💬 微信 Alexis_12_Z

如果觉得这个项目有帮助,欢迎 ⭐ Star 支持一下!

About

AI-powered data visualization assistant - Automatically generate professional charts from natural language descriptions. Supports 7 chart types and OpenAI/DeepSeek/Ollama platforms.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages