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

如何按Method类别分别绘制包含所有CSV文件数据的散点图?

解决方案

核心逻辑是先把3个CSV的数据合并,新增字段标记数据来源,再按Method分组绘图即可。

完整代码

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from pathlib import Path

ROOT = Path(__file__).resolve().parent
CSVS = [
    ROOT / "CSV_1.csv",
    ROOT / "CSV_2.csv",
    ROOT / "CSV_3.csv",
]

# 自定义三个CSV对应的标记样式,可替换为+、*、x等你需要的样式
MARKERS = ["o", "s", "^"]
# 自定义数据来源的显示名称,可按需求修改
SOURCE_LABELS = {
    "CSV_1": "数据集1",
    "CSV_2": "数据集2",
    "CSV_3": "数据集3"
}

def plot_per_method():
    # 合并所有CSV数据,新增source列标记来源
    total_data = []
    for csv_path in CSVS:
        df = pd.read_csv(csv_path)
        df["source"] = SOURCE_LABELS.get(csv_path.stem, csv_path.stem)
        total_data.append(df)
    total_df = pd.concat(total_data, ignore_index=True)
    
    # 遍历所有唯一的Method生成对应图表
    for method in total_df["Method"].unique():
        method_df = total_df[total_df["Method"] == method]
        plt.figure(figsize=(8, 8))
        sns.scatterplot(
            x="EC", y="MAE",
            data=method_df,
            hue="source", # 用颜色区分来源
            style="source", # 用标记区分来源
            markers=MARKERS,
            s=100 # 调大点位大小更清晰
        )
        # 修正原代码坐标轴标签和实际变量不匹配的问题
        plt.title(f"MAE vs EC ({method})")
        plt.xlabel("EC")
        plt.ylabel("MAE")
        plt.legend(title="数据来源")
        plt.savefig(f"{method}.png", dpi=300, bbox_inches="tight")
        plt.close()

if __name__ == "__main__":
    plot_per_method()

自定义调整说明

  • 如果只需要用颜色区分来源,删除sns.scatterplot中的style和markers参数即可
  • 如果只需要用标记区分来源,删除hue参数即可
  • 输出的4张图片会以对应Method的名称命名,保存在脚本同级目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 03:36:04