Python绘制清晰散点图:刻度无重叠+按CSV顺序排列
按CSV文件顺序绘制散点图并优化刻度
问题根源
原代码存在三个核心问题:
- 直接拼接所有CSV的
Index列,导致不同文件的数据点在x轴完全重叠,无法区分文件顺序 - 未对x轴刻度做优化处理,导致刻度拥挤重叠
- 变量名错误:
all_bit_indices未定义,实际应为all_indices
解决方案代码
import os import matplotlib.pyplot as plt import pandas as pd import numpy as np csv_directory = "Allplots/graphs" # 获取CSV文件列表,保持系统默认排序(如需自定义排序可手动调整) csv_files = sorted([file for file in os.listdir(csv_directory) if file.endswith(".csv")]) plt.figure(figsize=(16, 8)) # 遍历每个CSV文件,按顺序分配独立x区间 for file_idx, csv_file in enumerate(csv_files): file_path = os.path.join(csv_directory, csv_file) df = pd.read_csv(file_path) accuracy = df["Accuracy"] # 为当前文件分配x轴区间:每个文件占1个单位,内部数据点均匀分布 x = np.linspace(file_idx, file_idx + 1, len(accuracy)) # 绘制当前文件的散点图,可自定义颜色区分(可选) plt.scatter(x, accuracy, s=5, label=f"File {file_idx+1}: {csv_file[:-4]}") # 优化x轴刻度与标签 plt.xticks([i + 0.5 for i in range(len(csv_files))], [f"File {i+1}" for i in range(len(csv_files))], rotation=45, ha="right") plt.xlabel("CSV File Order", fontsize=12) plt.ylabel("Accuracy", fontsize=12) plt.title("Accuracy Distribution by CSV File (Ordered)", fontsize=14) # 若需要图例,可开启(文件过多时建议关闭,避免杂乱) # plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left") # 调整布局,避免标签被截断 plt.tight_layout() output_path = os.path.join(csv_directory, "ordered_scatter_plot.png") plt.savefig(output_path, dpi=300) plt.show()
关键优化说明
- 按文件顺序分离数据:通过为每个文件分配独立的x轴区间(每个文件占1个单位长度),确保不同文件的数据点不会混合,严格按文件顺序排列
- 刻度优化:将x轴刻度设置为文件序号(或文件名),并旋转45度避免重叠,
tight_layout()确保标签完整显示 - 数据点分布:使用
np.linspace在每个文件的x区间内均匀分布数据点,避免原Index列可能导致的重叠问题 - 可选增强:可通过
label参数添加文件标识,开启图例区分不同文件;调整s参数修改点的大小,适配数据量
内容的提问来源于stack exchange,提问作者user22049227
相关产品推荐
相关产品推荐

