diff --git a/resources/template/bar_chart/main.css b/resources/template/bar_chart/main.css
new file mode 100644
index 00000000..8c1cc039
--- /dev/null
+++ b/resources/template/bar_chart/main.css
@@ -0,0 +1,7 @@
+
+body {
+ position: absolute;
+ left: -8px;
+ top: -8px;
+}
+
diff --git a/resources/template/bar_chart/main.html b/resources/template/bar_chart/main.html
new file mode 100644
index 00000000..8728b14b
--- /dev/null
+++ b/resources/template/bar_chart/main.html
@@ -0,0 +1,50 @@
+
+
+
+
+ ECharts Example
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/zhenxun/builtin_plugins/statistics/_data_source.py b/zhenxun/builtin_plugins/statistics/_data_source.py
index 161dafc6..9cc1b2ae 100644
--- a/zhenxun/builtin_plugins/statistics/_data_source.py
+++ b/zhenxun/builtin_plugins/statistics/_data_source.py
@@ -6,6 +6,8 @@ from zhenxun.models.group_console import GroupConsole
from zhenxun.models.group_member_info import GroupInfoUser
from zhenxun.models.plugin_info import PluginInfo
from zhenxun.models.statistics import Statistics
+from zhenxun.utils.echart_utils import ChartUtils
+from zhenxun.utils.echart_utils.models import Barh
from zhenxun.utils.enum import PluginType
from zhenxun.utils.image_utils import BuildImage, BuildMat, MatType
@@ -114,7 +116,6 @@ class StatisticsManage:
@classmethod
async def __build_image(cls, data_list: list[tuple[str, int]], title: str):
- mat = BuildMat(MatType.BARH)
module2count = {x[0]: x[1] for x in data_list}
plugin_info = await PluginInfo.filter(
module__in=module2count.keys(),
@@ -125,7 +126,5 @@ class StatisticsManage:
for plugin in plugin_info:
x_index.append(plugin.name)
data.append(module2count.get(plugin.module, 0))
- mat.x_index = x_index
- mat.data = data
- mat.title = title
- return await mat.build()
+ barh = Barh(data=data, category_data=x_index)
+ return await ChartUtils.barh(barh)
diff --git a/zhenxun/utils/echart_utils/__init__.py b/zhenxun/utils/echart_utils/__init__.py
new file mode 100644
index 00000000..ede8c35e
--- /dev/null
+++ b/zhenxun/utils/echart_utils/__init__.py
@@ -0,0 +1,24 @@
+from nonebot_plugin_htmlrender import template_to_pic
+
+from zhenxun.configs.path_config import TEMPLATE_PATH
+from zhenxun.utils._build_image import BuildImage
+
+from .models import Barh
+
+
+class ChartUtils:
+
+ @classmethod
+ async def barh(cls, data: Barh) -> BuildImage:
+ """横向统计图"""
+ pic = await template_to_pic(
+ template_path=str((TEMPLATE_PATH / "bar_chart").absolute()),
+ template_name="main.html",
+ templates={"data": data},
+ pages={
+ "viewport": {"width": 1000, "height": 500},
+ "base_url": f"file://{TEMPLATE_PATH}",
+ },
+ wait=2,
+ )
+ return BuildImage.open(pic)
diff --git a/zhenxun/utils/echart_utils/models.py b/zhenxun/utils/echart_utils/models.py
new file mode 100644
index 00000000..8d9f639f
--- /dev/null
+++ b/zhenxun/utils/echart_utils/models.py
@@ -0,0 +1,9 @@
+from pydantic import BaseModel
+
+
+class Barh(BaseModel):
+
+ category_data: list[str]
+ """坐标轴数据"""
+ data: list[int | float]
+ """实际数据"""