在单张图中绘制多数据集:不同颜色区分问题求助
解决方案
方法1:循环读取文件并逐个绘图
直接遍历所有Excel文件,对每个文件单独筛选数据后绘图,matplotlib会自动为每条曲线分配不同颜色,无需手动设置。
import pandas as pd import matplotlib.pyplot as plt from glob import glob # 获取目标目录下所有Excel文件路径(按需修改路径) excel_paths = glob("./data/*.xlsx") plt.figure(figsize=(10, 6)) for path in excel_paths: # 读取单文件数据 df = pd.read_excel(path) # 筛选Measurement=2的前5行X、Y数据 filtered_data = df[df["Measurement"] == 2].head(5) # 绘图,用文件名作为图例标识 plt.plot(filtered_data["X"], filtered_data["Y"], label=path.split("/")[-1].split(".")[0]) # 配置图元素 plt.xlabel("X") plt.ylabel("Y") plt.title("Multiple Datasets in Single Plot") # 把图例放在图外避免遮挡 plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left") plt.tight_layout() plt.show()
方法2:添加数据集标识后分组绘图
如果需要保留合并后的数据集用于后续分析,可以给每个数据集添加标识列,再用Seaborn自动分组绘图,适合批量处理大量文件的场景。
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from glob import glob excel_paths = glob("./data/*.xlsx") all_datasets = [] for path in excel_paths: df = pd.read_excel(path) filtered_data = df[df["Measurement"] == 2].head(5) # 添加数据集标识列(用文件名区分) filtered_data["Dataset"] = path.split("/")[-1].split(".")[0] all_datasets.append(filtered_data) # 合并所有数据集 combined_df = pd.concat(all_datasets, ignore_index=True) plt.figure(figsize=(10, 6)) # 用hue参数按Dataset分组,自动分配不同颜色 sns.lineplot(data=combined_df, x="X", y="Y", hue="Dataset", marker="o") plt.xlabel("X") plt.ylabel("Y") plt.title("Multiple Datasets with Seaborn") plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left") plt.tight_layout() plt.show()
问题根源说明
你之前用pd.concat直接合并所有数据但未添加数据集标识列,导致绘图工具无法区分不同来源的数据,只能视为一组绘制。上述两种方法都无需手动处理每个数据集,能自动适配50个文件的批量需求。
内容的提问来源于stack exchange,提问作者Emanuele
相关产品推荐
相关产品推荐

