集成ECharts实现数据报表展示

以下是一个完整的Dify集成ECharts实现数据报表展示的实战代码示例,包含数据获取、图表配置和渲染逻辑:

from dify.client import DifyClient
import json
from pyecharts.charts import Bar
from pyecharts import options as opts

# 初始化Dify客户端
dify_client = DifyClient(api_key="your_api_key")

# 获取分析数据
def fetch_analysis_data():
    response = dify_client.post(
        "/analyze",
        json={
            "metrics": ["user_count", "order_count"],
            "time_range": "last_7_days"
        }
    )
    return json.loads(response.text)

# 处理数据并生成图表
def generate_chart():
    data = fetch_analysis_data()
    
    # 提取日期和数据
    dates = [item["date"] for item in data]
    user_counts = [item["user_count"] for item in data]
    order_counts = [item["order_count"] for item in data]

    # 创建柱状图
    bar = (
        Bar()
        .add_xaxis(dates)
        .add_yaxis("用户数", user_counts)
        .add_yaxis("订单数", order_counts)
        .set_global_opts(
            title_opts=opts.TitleOpts(title="7日数据分析"),
            tooltip_opts=opts.TooltipOpts(trigger="axis"),
            legend_opts=opts.LegendOpts(pos_top="5%"),
            datazoom_opts=[opts.DataZoomOpts()]
        )
    )
    
    # 渲染图表到HTML文件
    bar.render("analysis_report.html")
    return "analysis_report.html"

# 主执行函数
if __name__ == "__main__":
    chart_path = generate_chart()
    print(f"图表已生成,路径:{chart_path}")

前端展示集成

在Dify应用中集成ECharts前端展示的React组件代码:

import React, { useEffect, useRef } from 'react';
import * as echarts from 'echarts';

const DataReport = ({ apiData }) => {
  const chartRef = useRef(null);
  
  useEffect(() => {
    if (!apiData || !chartRef.current) return;
    
    const chart = echarts.init(chartRef.current);
    const option = {
      tooltip: {
        trigger: 'axis',
        axisPointer: { type: 'shadow' }
      },
      legend: {
        data: ['用户数', '订单数']
      },
      grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
      },
      xAxis: {
        type: 'category',
        data: apiData.map(item => item.date)
      },
      yAxis: { type: 'value' },
      series: [
        {
          name: '用户数',
          type: 'bar',
          data: apiData.map(item => item.user_count)
        },
        {
          name: '订单数',
          type: 'bar',
          data: apiData.map(item => item.order_count)
        }
      ]
    };
    
    chart.setOption(option);
    
    return () => {
      chart.dispose();
    };
  }, [apiData]);

  return <div ref={chartRef} style={{ width: '100%', height: '400px' }} />;
};

export default DataReport;

后端API数据接口

为前端提供数据API的FastAPI实现:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from dify.client import DifyClient
import json

app = FastAPI()
dify_client = DifyClient(api_key="your_api_key")

# 允许跨域
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.get("/api/analysis-data")
async def get_analysis_data():
    response = dify_client.post(
        "/analyze",
        json={
            "metrics": ["user_count", "order_count"],
            "time_range": "last_7_days"
        }
    )
    return json.loads(response.text)

配置说明

  1. 需要安装的Python依赖:

    pip install dify-client pyecharts fastapi uvicorn
    

  2. 前端需要安装的依赖:

    npm install echarts
    

  3. 运行后端服务:

    uvicorn main:app --reload
    

  4. 图表交互功能包含:

    • 数据缩放
    • 悬停提示
    • 图例切换
    • 响应式布局

以上代码实现了一个完整的Dify集成ECharts的数据报表解决方案,从数据获取到前端展示的全流程。图表可以根据实际业务需求扩展更多类型和交互功能。

集成ECharts实现数据报表展示

以下是一个完整的Dify集成ECharts实现数据报表展示的实战代码示例,包含数据获取、图表配置和渲染逻辑:

from dify.client import DifyClient
import json
from pyecharts.charts import Bar
from pyecharts import options as opts

# 初始化Dify客户端
dify_client = DifyClient(api_key="your_api_key")

# 获取分析数据
def fetch_analysis_data():
    response = dify_client.post(
        "/analyze",
        json={
            "metrics": ["user_count", "order_count"],
            "time_range": "last_7_days"
        }
    )
    return json.loads(response.text)

# 处理数据并生成图表
def generate_chart():
    data = fetch_analysis_data()
    
    # 提取日期和数据
    dates = [item["date"] for item in data]
    user_counts = [item["user_count"] for item in data]
    order_counts = [item["order_count"] for item in data]

    # 创建柱状图
    bar = (
        Bar()
        .add_xaxis(dates)
        .add_yaxis("用户数", user_counts)
        .add_yaxis("订单数", order_counts)
        .set_global_opts(
            title_opts=opts.TitleOpts(title="7日数据分析"),
            tooltip_opts=opts.TooltipOpts(trigger="axis"),
            legend_opts=opts.LegendOpts(pos_top="5%"),
            datazoom_opts=[opts.DataZoomOpts()]
        )
    )
    
    # 渲染图表到HTML文件
    bar.render("analysis_report.html")
    return "analysis_report.html"

# 主执行函数
if __name__ == "__main__":
    chart_path = generate_chart()
    print(f"图表已生成,路径:{chart_path}")

前端展示集成

在Dify应用中集成ECharts前端展示的React组件代码:

import React, { useEffect, useRef } from 'react';
import * as echarts from 'echarts';

const DataReport = ({ apiData }) => {
  const chartRef = useRef(null);
  
  useEffect(() => {
    if (!apiData || !chartRef.current) return;
    
    const chart = echarts.init(chartRef.current);
    const option = {
      tooltip: {
        trigger: 'axis',
        axisPointer: { type: 'shadow' }
      },
      legend: {
        data: ['用户数', '订单数']
      },
      grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
      },
      xAxis: {
        type: 'category',
        data: apiData.map(item => item.date)
      },
      yAxis: { type: 'value' },
      series: [
        {
          name: '用户数',
          type: 'bar',
          data: apiData.map(item => item.user_count)
        },
        {
          name: '订单数',
          type: 'bar',
          data: apiData.map(item => item.order_count)
        }
      ]
    };
    
    chart.setOption(option);
    
    return () => {
      chart.dispose();
    };
  }, [apiData]);

  return <div ref={chartRef} style={{ width: '100%', height: '400px' }} />;
};

export default DataReport;

后端API数据接口

为前端提供数据API的FastAPI实现:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from dify.client import DifyClient
import json

app = FastAPI()
dify_client = DifyClient(api_key="your_api_key")

# 允许跨域
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.get("/api/analysis-data")
async def get_analysis_data():
    response = dify_client.post(
        "/analyze",
        json={
            "metrics": ["user_count", "order_count"],
            "time_range": "last_7_days"
        }
    )
    return json.loads(response.text)

配置说明

  1. 需要安装的Python依赖:

    pip install dify-client pyecharts fastapi uvicorn
    

  2. 前端需要安装的依赖:

    npm install echarts
    

  3. 运行后端服务:

    uvicorn main:app --reload
    

  4. 图表交互功能包含:

    • 数据缩放
    • 悬停提示
    • 图例切换
    • 响应式布局

以上代码实现了一个完整的Dify集成ECharts的数据报表解决方案,从数据获取到前端展示的全流程。图表可以根据实际业务需求扩展更多类型和交互功能。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐