feat: render-column (GT top + algos stacked), fix hour60 parsing, vivid anomaly markers
This commit is contained in:
@@ -225,6 +225,15 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
p_mt.add_argument("--cols", type=int, default=2, help="列数 (default: 2)")
|
||||
p_mt.add_argument("--title", default="", help="总标题")
|
||||
|
||||
# render-column
|
||||
p_rc = sub.add_parser("render-column", help="GT 顶部 + 各算法纵向对比")
|
||||
p_rc.add_argument("--gt-csv", required=True, help="GT CSV 文件路径")
|
||||
p_rc.add_argument("--stable", required=True, help="supertable 名称")
|
||||
p_rc.add_argument("--db", default="ts_anomaly", help="数据库名")
|
||||
p_rc.add_argument("--value-col", default="value", help="数值列名 (default: value)")
|
||||
p_rc.add_argument("--output", required=True, help="PNG 输出路径")
|
||||
p_rc.add_argument("--url", default="ws://root:taosdata@localhost:6041", help="TDengine WebSocket URL")
|
||||
|
||||
return parser
|
||||
|
||||
|
||||
@@ -258,6 +267,27 @@ def cmd_montage(args):
|
||||
logger.info("montage complete: %s", args.output)
|
||||
|
||||
|
||||
def cmd_render_column(args):
|
||||
"""render-column 子命令:GT 顶部 + 各算法纵向对比。"""
|
||||
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
|
||||
|
||||
from ts_anomaly_td.io_csv import read_csv
|
||||
from ts_anomaly_td.visualize import render_column
|
||||
|
||||
ts, vals, labels = read_csv(args.gt_csv, value_col=args.value_col)
|
||||
|
||||
conn = TDConnection(args.url)
|
||||
try:
|
||||
db = args.db or "ts_anomaly"
|
||||
conn.execute_no_result(f"USE {db}")
|
||||
results = detect_all_algos(conn, args.stable)
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
title = f"{args.stable} — 算法对比"
|
||||
render_column(ts, vals, labels, results, args.output, title=title)
|
||||
|
||||
|
||||
def main():
|
||||
parser = build_parser()
|
||||
args = parser.parse_args()
|
||||
@@ -271,6 +301,7 @@ def main():
|
||||
"watch": cmd_watch,
|
||||
"render-algo": cmd_render_algo,
|
||||
"montage": cmd_montage,
|
||||
"render-column": cmd_render_column,
|
||||
}
|
||||
|
||||
fn = dispatch.get(args.command)
|
||||
|
||||
Reference in New Issue
Block a user