import os import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from matplotlib.ticker import MaxNLocator import warnings warnings.filterwarnings("ignore", category=FutureWarning) # 忽略特定警告 plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体 plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题 # 指定文件夹路径 folder_path = r'C:/Users/laiwe/Desktop/风电/激光测量/测试数据/20250728/' # 遍历文件夹中的所有CSV文件 for filename in os.listdir(folder_path): if filename.endswith('.csv'): csv_path = os.path.join(folder_path, filename) # 读取第2、4、9列的数据 data = pd.read_csv(csv_path, usecols=[1, 3, 8], header=None, engine='c') # 找到第一列中最大值和最小值的位置 max_value = data.iloc[:, 0].max() max_index = data.iloc[:, 0].idxmax() min_index = data.iloc[:, 0].idxmin() print(f'最大值: {max_value}, 最大值位置: {max_index}') print(f'最小值: {data.iloc[min_index, 0]}, 最小值位置: {min_index}') # 检查最小值的位置是否是最大值位置的下一个 if min_index == max_index + 1: # 将最小值及其之后的所有值都加上最大值 data.iloc[min_index:, 0] += max_value data = data.head(int(len(data) * 0.01)) # 绘制原始数据图 data.columns = ['time', 'distance1', 'distance2'] plt.figure(figsize=(300, 150)) sns.scatterplot(data=data, x='time', y='distance1', s=50, color='green') sns.scatterplot(data=data, x='time', y='distance2', s=50, color='red') abxy = plt.gca() # 获取当前坐标轴对象 plt.grid(linewidth=2) # 设置网格线宽度为2 abxy.xaxis.set_major_locator(MaxNLocator(nbins=100)) # 设置x轴主刻度的最大数量为10 plt.xlabel('时间', fontsize=16, fontweight='bold') # 添加x轴标签 plt.ylabel('距离(m)', fontsize=16, fontweight='bold') # 添加y轴标签 abxy.tick_params(axis='x', labelsize=14, labelcolor='black', width=2) # 设置x轴刻度标签 abxy.tick_params(axis='y', labelsize=14, labelcolor='black', width=2) # 设置y轴刻度标签 # 生成图像文件名 image_filename = os.path.splitext(filename)[0] + 'small.png' image_path = os.path.join(folder_path, image_filename) # 保存图像 plt.savefig(image_path, dpi=100, pil_kwargs={"icc_profile": False}) plt.close()