You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PandasAI生成的图表作为Flask API响应在浏览器展示?

问题:如何将PandasAI生成的图片作为Flask API响应返回

调用Flask API地址http://localhost:3000/gdpChart时,PandasAI生成的图表会弹出窗口,但无法直接作为API响应在浏览器中显示,需要调整代码实现图片的直接返回。

解决方案

通过修改matplotlib后端配置,并将图表保存到内存字节流中,再通过Flask的send_file返回响应,具体修改如下:

修改后的完整代码

from pandasai import PandasAI
from pandasai.llm.openai import OpenAI
import pandas as pd
import os
from flask import send_file, Flask
import io
import matplotlib.pyplot as plt

app = Flask(__name__)
port = int(os.environ.get('PORT', 3000))

@app.route('/gdpChart/')
def getChart():
    # 切换为非交互式后端,禁止弹出图片窗口
    plt.switch_backend('Agg')
    
    # 初始化OpenAI LLM和PandasAI
    llm = OpenAI(api_token='<<<<<my_api_token>>>>>')
    pandas_ai = PandasAI(llm)
    
    # 示例数据
    df1 = pd.DataFrame({
        "country": ["United States", "United Kingdom", "France", "Germany", "Italy", "Spain", "Canada", "Australia", "Japan", "China"],
        "gdp": [21400000, 2940000, 2830000, 3870000, 2160000, 1350000, 1780000, 1320000, 516000, 14000000],
        "happiness_index": [7.3, 7.2, 6.5, 7.0, 6.0, 6.3, 7.3, 7.3, 5.9, 5.0]
    })
    
    # 修正prompt描述(饼图对应slice而非bar)
    prompt = 'Plot the pie chart of countries showing each country\'s GDP, using different colors for each slice'
    # 运行PandasAI生成图表,此时不会弹出窗口
    pandas_ai.run(df1, prompt=prompt, is_conversational_answer=False)
    
    # 将图表写入内存字节流
    bytes_image = io.BytesIO()
    plt.savefig(bytes_image, format='png')
    bytes_image.seek(0)  # 将流指针重置到起始位置
    
    # 返回图片响应
    return send_file(bytes_image, mimetype='image/png')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=port)

关键修改说明

  • 切换matplotlib后端:添加plt.switch_backend('Agg'),使用非交互式后端生成图表,避免弹出本地图片窗口,同时支持将图表保存到内存。
  • 捕获并保存图表到内存:调用pandas_ai.run后,通过plt.savefig将当前上下文的图表写入io.BytesIO内存流,无需保存到本地文件。
  • 返回正确的响应:使用send_file返回内存流,设置mimetype='image/png'与保存的图片格式匹配,确保浏览器能正确解析显示。

内容的提问来源于stack exchange,提问作者F H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 17:37:34