| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- 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()
|