diff --git a/AI/Text2Sql/Util/EchartsUtil.py b/AI/Text2Sql/Util/EchartsUtil.py index a5b00d01..6e7c5836 100644 --- a/AI/Text2Sql/Util/EchartsUtil.py +++ b/AI/Text2Sql/Util/EchartsUtil.py @@ -5,7 +5,6 @@ import os def generate_chart( _data, - chart_type: str, # 图表类型:'bar' 或 'pie' title: str, # 图表标题 category_columns: list, # 分类数据列(X 轴或饼图标签) value_column: str, # 数值数据列(Y 轴或饼图值) @@ -49,52 +48,48 @@ def generate_chart( ''') # 生成柱形图 - if chart_type == 'bar': - chart = Bar() - chart.add_xaxis(categories) - chart.add_yaxis( - series_name=value_column, - y_axis=values, - bar_width="30%", - itemstyle_opts=opts.ItemStyleOpts(color=color_js) - ) - chart.set_global_opts( - title_opts=opts.TitleOpts(title=title), - xaxis_opts=opts.AxisOpts( - name=" - ".join(category_columns), - axislabel_opts=opts.LabelOpts(rotate=45), - boundary_gap=True, - splitline_opts=opts.SplitLineOpts(is_show=False) - ), - yaxis_opts=opts.AxisOpts(name=value_column), - legend_opts=opts.LegendOpts(is_show=False) - ) + bar_chart = Bar() + bar_chart.add_xaxis(categories) + bar_chart.add_yaxis( + series_name=value_column, + y_axis=values, + bar_width="30%", + itemstyle_opts=opts.ItemStyleOpts(color=color_js) + ) + bar_chart.set_global_opts( + title_opts=opts.TitleOpts(title=title), + xaxis_opts=opts.AxisOpts( + name=" - ".join(category_columns), + axislabel_opts=opts.LabelOpts(rotate=45), + boundary_gap=True, + splitline_opts=opts.SplitLineOpts(is_show=False) + ), + yaxis_opts=opts.AxisOpts(name=value_column), + legend_opts=opts.LegendOpts(is_show=False) + ) # 生成饼形图 - elif chart_type == 'pie': - data_pairs = list(zip(categories, values)) - chart = Pie() - chart.add( - series_name="占比", - data_pair=data_pairs, - radius=["30%", "55%"], - label_opts=opts.LabelOpts( - formatter="{b}\n{d}%", - position="outside", - font_size=14 - ), - itemstyle_opts=opts.ItemStyleOpts(color=color_js) - ) - chart.set_global_opts( - title_opts=opts.TitleOpts( - title=title, - subtitle="数据维度:" + " → ".join(category_columns) - ), - legend_opts=opts.LegendOpts(is_show=False) - ) + data_pairs = list(zip(categories, values)) + pie_chart = Pie() + pie_chart.add( + series_name="占比", + data_pair=data_pairs, + radius=["30%", "55%"], + label_opts=opts.LabelOpts( + formatter="{b}\n{d}%", + position="outside", + font_size=14 + ), + itemstyle_opts=opts.ItemStyleOpts(color=color_js) + ) + pie_chart.set_global_opts( + title_opts=opts.TitleOpts( + title=title, + subtitle="数据维度:" + " → ".join(category_columns) + ), + legend_opts=opts.LegendOpts(is_show=False) + ) - else: - raise ValueError("不支持的图表类型!") # 确保目标目录存在 os.makedirs(os.path.dirname(output_file), exist_ok=True) @@ -102,7 +97,8 @@ def generate_chart( # 创建 Page 实例,并指定标题 page = Page(page_title="长春云校数据统计分析系统") # 将两个图表添加到 Page 实例中 - page.add(chart) + page.add(bar_chart) + page.add(pie_chart) # 将 Page 实例保存为 HTML 文件 page.render(output_file) diff --git a/AI/Text2Sql/Util/__pycache__/EchartsUtil.cpython-310.pyc b/AI/Text2Sql/Util/__pycache__/EchartsUtil.cpython-310.pyc index b7b4134e..b0077f23 100644 Binary files a/AI/Text2Sql/Util/__pycache__/EchartsUtil.cpython-310.pyc and b/AI/Text2Sql/Util/__pycache__/EchartsUtil.cpython-310.pyc differ diff --git a/AI/Text2Sql/__pycache__/app.cpython-310.pyc b/AI/Text2Sql/__pycache__/app.cpython-310.pyc index 83259e11..4ba9da3c 100644 Binary files a/AI/Text2Sql/__pycache__/app.cpython-310.pyc and b/AI/Text2Sql/__pycache__/app.cpython-310.pyc differ diff --git a/AI/Text2Sql/app.py b/AI/Text2Sql/app.py index b10c613c..a005d23d 100644 --- a/AI/Text2Sql/app.py +++ b/AI/Text2Sql/app.py @@ -33,8 +33,8 @@ async def lifespan(app: FastAPI): database=PG_DATABASE, user=PG_USER, password=PG_PASSWORD, - min_size=1, - max_size=10 + min_size=5, + max_size=20 ) yield # 关闭时释放连接池 @@ -274,7 +274,6 @@ async def get_data_scheme_by_id( async def get_chart( question_id: str = Form(None, description="问题ID(POST请求)"), title: str = Form(None, description="图表标题(POST请求)"), - type_id: str = Form(1, description="图表类型ID(POST请求),1:柱图,2:饼图"), category_columns_str: str = Form(None, description="分类数据列(X 轴或饼图标签)"), value_column_str: str = Form(None, description="数值数据列(Y 轴或饼图值)"), db: asyncpg.Connection = Depends(get_db) @@ -289,25 +288,13 @@ async def get_chart( filename = f"static/html/{uuid_str}.html" # 根据图表类型生成图表 - if int(type_id) == 1: # 1、生成柱状图 - generate_chart( - _data=_data, - chart_type='bar', - title=title, - category_columns=category_columns_str.split(","), - value_column=value_column_str, - output_file=filename - ) - elif int(type_id) == 2: # 2、生成饼状图 - generate_chart( - _data=_data, - chart_type='pie', - title=title, - category_columns=category_columns_str.split(","), - value_column=value_column_str, - output_file=filename - ) - + generate_chart( + _data=_data, + title=title, + category_columns=category_columns_str.split(","), + value_column=value_column_str, + output_file=filename + ) # 返回静态文件URL return {"success": True, "message": "图表文件生成成功", "url": filename} diff --git a/AI/Text2Sql/static/html/c37ac7ef-626a-4bff-a739-abb8bb07c676.html b/AI/Text2Sql/static/html/c37ac7ef-626a-4bff-a739-abb8bb07c676.html new file mode 100644 index 00000000..4bdcb6e7 --- /dev/null +++ b/AI/Text2Sql/static/html/c37ac7ef-626a-4bff-a739-abb8bb07c676.html @@ -0,0 +1,715 @@ + + +
+ +