从文本文档里读取某一列数据并绘图
txt文档格式如下:
取第六列数据:**line.strip().split(',')[0].split()[5:6]**
取后三列数据:
**line.strip().split(',')[0].split()[12:13]
line.strip().split(',')[0].split()[13:14]
line.strip().split(',')[0].split()[14:15]**
代码如下:
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
# 设置x,y轴的数值(y=sinx)
x = np.array(list(i for i in range(100)))
y1 = [] #yolov3_loss
y2 = [] #LF-YOLO_loss
y3 = [] #LF-YOLO-SE_loss
box1,box2,box3=[],[],[]
obj1,obj2,obj3=[],[],[]
cls1,cls2,cls3=[],[],[]
path1=r'C:\Users\YUXIAOYANG\Desktop\yolov3.txt'
path2=r'C:\Users\YUXIAOYANG\Desktop\LF-YOLO.txt'
path3='./runs/train/exp47/results.txt'
path=[path1,path2,path3]
with open(path1 ,'r') as f:
for line in f:
y1.append(line.strip().split(',')[0].split()[5:6]) #a.append(b):是将b原封不动的追加到a的末尾上,会改变a的值
#strip()用于移除字符串头尾指定的字符(默认为空格或者换行符)或字符序列
box1.append(line.strip().split(',')[0].split()[12:13])
obj1.append(line.strip().split(',')[0].split()[13:14])
cls1.append(line.strip().split(',')[0].split()[14:15])
y1 = np.array(y1, dtype=np.float32)
box1=np.array(box1,dtype=np.float32)
obj1=np.array(obj1,dtype=np.float32)
cls1=np.array(cls1,dtype=np.float32)
val_loss1=box1+obj1+cls1
#--------------------读取多个文本文档-----------------
# with open(r'C:\Users\YUXIAOYANG\Desktop\LF-YOLO.txt' ,'r') as f:
# for line in f:
# y2.append(line.strip().split(',')[0].split()[5:6])
# with open('./runs/train/exp46/results.txt' ,'r') as f:
# for line in f:
# y3.append(line.strip().split(',')[0].split()[5:6])
#
# y1=np.array(y1,dtype=np.float32)
# y2=np.array(y2,dtype=np.float32)
# y3=np.array(y3,dtype=np.float32)
with open(path2 ,'r') as f:
for line in f:
y2.append(line.strip().split(',')[0].split()[5:6]) #a.append(b):是将b原封不动的追加到a的末尾上,会改变a的值
#strip()用于移除字符串头尾指定的字符(默认为空格或者换行符)或字符序列
box2.append(line.strip().split(',')[0].split()[12:13])
obj2.append(line.strip().split(',')[0].split()[13:14])
cls2.append(line.strip().split(',')[0].split()[14:15])
y2 = np.array(y2, dtype=np.float32)
box2=np.array(box2,dtype=np.float32)
obj2=np.array(obj2,dtype=np.float32)
cls2=np.array(cls2,dtype=np.float32)
val_loss2=box2+obj2+cls2
with open(path3 ,'r') as f:
for line in f:
y3.append(line.strip().split(',')[0].split()[5:6]) #a.append(b):是将b原封不动的追加到a的末尾上,会改变a的值
#strip()用于移除字符串头尾指定的字符(默认为空格或者换行符)或字符序列
box3.append(line.strip().split(',')[0].split()[12:13])
obj3.append(line.strip().split(',')[0].split()[13:14])
cls3.append(line.strip().split(',')[0].split()[14:15])
y3 = np.array(y3, dtype=np.float32)
box3=np.array(box3,dtype=np.float32)
obj3=np.array(obj3,dtype=np.float32)
cls3=np.array(cls3,dtype=np.float32)
val_loss3=box3+obj3+cls3
# 创建绘图对象,figsize参数可以指定绘图对象的宽度和高度,单位为英寸,一英寸=80px
plt.figure(figsize=(8, 4))
# 在当前绘图对象中画图(x轴,y轴,给所绘制的曲线的名字,画线颜色,画线宽度)
# plt.plot(x, y1, label="$YOLOV3$", color="red", linewidth=2)
# plt.plot(x, y2, label="$LF-YOLO$", color="blue", linewidth=2)
# plt.plot(x, y3, label="$LF-YOLO-SE$", color="green", linewidth=2)
plt.plot(x, y3, label="$train$", color="red", linewidth=2)
plt.plot(x, val_loss3, label="$val$", color="blue", linewidth=2)
# X轴的文字
plt.xlabel("epoch")
# Y轴的文字
plt.ylabel("loss")
# 图表的标题
plt.title("LF-YOLO-SE Model Loss")
# Y轴的范围
#plt.ylim(-1.2, 1.2)
# 显示图示
plt.legend()
# 显示图
plt.savefig(r"C:\Users\YUXIAOYANG\Desktop\LF-YOLO-SE Model Loss .jpg")
plt.show()