XJTU_SY_Bearing数据可视化
(1)本文使用Python绘制水平垂直方向振动信号图以及全寿命周期振动信号图,供大家学习参考。(4)遍历数据文件绘制每个csv文件水平垂直振动信号图。(5)绘制XJTU-SY轴承全寿命周期振动信号。数据使用者应引用以下论文。
·
(1)本文使用Python绘制水平垂直方向振动信号图以及全寿命周期振动信号图,供大家学习参考。
(2)XJTU-SY 轴承数据集已上传至国内外各大主流云存储平台,实现开放获取,读者可通过以下链接自行下载分析 http://biaowang.tech/xjtu-sy-bearing-datasets
(3) 数据使用者应引用以下论文
WANG Biao , LEI Yaguo , LI Naipeng , et al. A hybrid prognostics approach for estimating remaining useful life of rolling element bearings[J]. IEEE Transactions on Reliability, 2018:1-12.
(4)遍历数据文件绘制每个csv文件水平垂直振动信号图
import os
import glob
import numpy as np
import matplotlib.pyplot as plt
# 设置全局字体
plt.rcParams['font.family'] = 'Times New Roman'
# 数据路径
base_path = r'D:\剩余寿命预测RUL\XJTU-SY_Bearing_Datasets\Data\XJTU-SY'
save_path = os.path.join(base_path, 'Vibration Figure')
# 创建保存目录
os.makedirs(save_path, exist_ok=True)
# 获取 Condition_X 文件夹
condition_folders = glob.glob(os.path.join(base_path, 'Condition_*'))
# 遍历每个工况
for condition_folder in condition_folders:
condition_name = os.path.basename(condition_folder)
bearing_folders = glob.glob(os.path.join(condition_folder, 'Bearing*'))
# 遍历每个轴承
for bearing_folder in bearing_folders:
bearing_name = os.path.basename(bearing_folder)
csv_files = glob.glob(os.path.join(bearing_folder, '*.csv'))
if not csv_files:
print(f'⚠️ 未找到 CSV 文件: {bearing_folder}')
continue
# 遍历 CSV 文件
for csv_file in csv_files:
file_name = os.path.basename(csv_file)
try:
# 读取 CSV 文件(检查前 5 行)
data = np.genfromtxt(csv_file, delimiter=',', skip_header=1)
if data.shape[1] != 2:
print(f'⚠️ 文件 {csv_file} 数据格式异常: 预期 2 列, 但得到 {data.shape[1]} 列')
continue
print(f'✅ 读取 {csv_file}, 形状: {data.shape}')
# 创建包含两个子图的图形
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(16, 4))
# 左侧子图:绘制水平振动信号
ax1.plot(data[:, 0], label='Horizontal Vibration', color='b')
ax1.set_title(f'Horizontal Vibration', fontdict={'family': 'SimSun', 'size': 14}, family=["Times New Roman", "SimSun"])
ax1.set_xlabel('Time (s)', fontdict={'family': 'SimSun', 'size': 12}, family=["Times New Roman", "SimSun"])
ax1.set_ylabel('Vibration Amplitude (m/s²)', fontdict={'family': 'SimSun', 'size': 12}, family=["Times New Roman", "SimSun"])
ax1.grid(True)
# 右侧子图:绘制垂直振动信号
ax2.plot(data[:, 1], label='Vertical Vibration', color='b')
ax2.set_title(f'Vertical Vibration', fontdict={'family': 'SimSun', 'size': 14}, family=["Times New Roman", "SimSun"])
ax2.set_xlabel('Time (s)', fontdict={'family': 'SimSun', 'size': 12}, family=["Times New Roman", "SimSun"])
ax2.set_ylabel('Vibration Amplitude (m/s²)', fontdict={'family': 'SimSun', 'size': 12}, family=["Times New Roman", "SimSun"])
ax2.grid(True)
# 修改这里:设置整体标题
plt.suptitle(f'{condition_name} - {bearing_name} - {file_name}',fontsize=15,family='Times New Roman')
# 自动调整子图位置,避免标签重叠
fig.tight_layout(rect=[0, 0, 1, 0.96]) # 保证标题和子图不重叠
# 保存图像
save_folder = os.path.join(save_path, condition_name, bearing_name)
os.makedirs(save_folder, exist_ok=True)
save_png = os.path.join(save_folder, f'{file_name}.png')
save_svg = os.path.join(save_folder, f'{file_name}.svg')
plt.savefig(save_png, dpi=600, bbox_inches='tight')
plt.savefig(save_svg, format='svg', bbox_inches='tight')
plt.close()
except Exception as e:
print(f'❌ 读取 {csv_file} 失败: {e}')
print("✅ 所有图像处理完成!")

(5)绘制XJTU-SY轴承全寿命周期振动信号
import os
import glob
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 设置全局字体
plt.rcParams['font.family'] = 'Times New Roman'
# 定义新数据集的基路径
base_path = r'D:\剩余寿命预测RUL\XJTU-SY_Bearing_Datasets\Data\XJTU-SY'
save_path = os.path.join(base_path, 'Life_Cycle_Figures')
# 如果保存路径不存在,则创建
if not os.path.exists(save_path):
os.makedirs(save_path)
# 遍历所有工况文件夹(Condition_1, Condition_2, Condition_3)
condition_folders = glob.glob(os.path.join(base_path, 'Condition_*'))
# 遍历每个工况
for condition_folder in condition_folders:
condition_name = os.path.basename(condition_folder)
# 遍历该工况下的所有轴承文件夹(Bearing1_1, Bearing1_2, ...)
bearing_folders = glob.glob(os.path.join(condition_folder, 'Bearing*'))
for bearing_folder in bearing_folders:
bearing_name = os.path.basename(bearing_folder)
print(f"Processing {condition_name} - {bearing_name}...")
# 获取当前轴承的所有CSV数据文件(按文件名排序,保证时间顺序)
csv_files = sorted(glob.glob(os.path.join(bearing_folder, '*.csv')),
key=lambda x: int(os.path.basename(x).split('.')[0]))
# 存储所有数据
horizontal_data = []
vertical_data = []
# 读取所有 CSV 文件
for csv_file in csv_files:
df = pd.read_csv(csv_file) # 读取 CSV
if df.shape[1] < 2:
print(f"⚠️ 警告:文件 {csv_file} 列数不足,跳过此文件!")
continue
data = df.to_numpy() # 转换为 numpy 数组
horizontal_data.append(data[:, 0]) # 第一列:水平振动
vertical_data.append(data[:, 1]) # 第二列:垂直振动
if not horizontal_data or not vertical_data:
print(f"❌ 错误:{condition_name} - {bearing_name} 没有有效数据,跳过绘图!")
continue
# 合并所有数据,形成完整的寿命周期
horizontal_data = np.concatenate(horizontal_data)
vertical_data = np.concatenate(vertical_data)
# 绘制完整寿命周期振动信号图
plt.figure(figsize=(10, 8))
plt.subplot(211)
plt.plot(horizontal_data, color='#2632cd')
plt.title(f'{condition_name} - {bearing_name} 水平振动信号', fontdict={'family': 'SimSun', 'size': 14})
plt.xlabel(r'时间 (s)', fontdict={'family': 'SimSun', 'size': 12})
plt.ylabel(r'振动幅值 (m/s²)', fontdict={'family': 'SimSun', 'size': 12})
plt.xticks(fontname='Times New Roman')
plt.yticks(fontname='Times New Roman')
plt.subplot(212)
plt.plot(vertical_data, color='#2632cd')
plt.title(f'{condition_name} - {bearing_name} 垂直振动信号', fontdict={'family': 'SimSun', 'size': 14})
plt.xlabel(r'时间 (s)', fontdict={'family': 'SimSun', 'size': 12})
plt.ylabel(r'振动幅值 (m/s²)', fontdict={'family': 'SimSun', 'size': 12})
plt.xticks(fontname='Times New Roman')
plt.yticks(fontname='Times New Roman')
plt.tight_layout()
# 保存图像
save_fig_path = os.path.join(save_path, f'{condition_name}_{bearing_name}_life_cycle.png')
save_svg_path = os.path.join(save_path, f'{condition_name}_{bearing_name}_life_cycle.svg')
plt.savefig(save_fig_path, dpi=600, bbox_inches='tight')
plt.savefig(save_svg_path, dpi=600, bbox_inches='tight')
plt.close()
print("✅ 所有轴承全寿命周期遍历图绘制完成!")


魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)